[PHP]Lista rozwijana ze zmiennymi |
[PHP]Lista rozwijana ze zmiennymi |
22.11.2018, 13:57:28
Post
#41
|
|
Grupa: Zarejestrowani Postów: 308 Pomógł: 0 Dołączył: 9.12.2009 Ostrzeżenie: (10%) |
Co tu jest nie tak ?
Ten post edytował david8213 22.11.2018, 13:59:36 |
|
|
22.11.2018, 14:02:16
Post
#42
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
To samo co wcześniej.
-------------------- |
|
|
22.11.2018, 15:16:30
Post
#43
|
|
Grupa: Zarejestrowani Postów: 308 Pomógł: 0 Dołączył: 9.12.2009 Ostrzeżenie: (10%) |
a czy jest możliwość zrobienia warunku...
Jak wybiorę z listy pierwszej aaaaaa lub bbbbb to z drugiej listy bedzie dostępna opcja 180 i 200 a ostatnia czyli 160 będzie zablokowana oraz jak wybiorę z listy pierwszej cccccc to na drugiej liście zablokowane będzie 200 i 180 a odblokuje się opcja 160 Czy w css nie da się tego zrobić ? Ten post edytował david8213 22.11.2018, 15:25:10 |
|
|
23.11.2018, 14:36:18
Post
#44
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) |
@david8213
Heh, trochę śmieszy mnie Twoje podejście do pewnych spraw. Jak na jednym forum nie podadzą Ci GOTOWEGO rozwiązania to biegniesz na drugie i na odwrót. Rozwiązanie Twojego problemu to (tak jak pisałem wcześniej): - JS - onChange - blokowanie optionów (https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_option_disabled2) |
|
|
24.11.2018, 14:52:58
Post
#45
|
|
Grupa: Zarejestrowani Postów: 308 Pomógł: 0 Dołączył: 9.12.2009 Ostrzeżenie: (10%) |
Jak wybiorę opcję z listy pierwszej 111111111 to ma mi zablokować pozycję czwartą z listy drugiej czyli 160
Moze mi ktoś pomóc z warunkiem chodzi o składnię
To tez nie działa
Ten post edytował david8213 24.11.2018, 18:24:29 |
|
|
24.11.2018, 19:56:13
Post
#46
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Kod const arr = ['oak', null,'spruce']; const arr2 = [4, 2, null]; function a() { for(var i=0;i<document.getElementById('trees').length;i++) { for(var j=0;j<arr.length;j++) { if(arr2[j] === null) { continue; } document.getElementById('tree_type').children[arr2[j]].disabled = false; if(document.getElementById('trees').selectedOptions[0].value === arr[j]) { document.getElementById('tree_type').children[arr2[j]].disabled = true; } } } } a(); document.getElementById("trees").addEventListener('change', a, false); Do arr wpisujesz nazwy, które masz w select#trees, a do arr2 te, które są w select#tree_type. Indeks w tablicy arr odpowiada indeksowi w arr2, więc jeśli w arr jest 'oak' i aktualnie jest zaznaczony, to wtedy zablokuj możliwość wyboru w select#tree_type o numerze takim, jaki jest w arr2. Poszukaj funkcji itp., żeby skrócić zapis z dwiema pętlami, jeśli się da oczywiście. Jeśli skrypt nie będzie działał jak należy, pisz. Ten post edytował Neutral 24.11.2018, 19:59:21 |
|
|
25.11.2018, 09:46:13
Post
#47
|
|
Grupa: Zarejestrowani Postów: 308 Pomógł: 0 Dołączył: 9.12.2009 Ostrzeżenie: (10%) |
Menu ma wyglądać jak poniżej
Czyli Dla Rury od standardowa do Plastikowa mają być dostępne tylko opcje 300, 250, 200 natomiast dla rur gumowej i stalowej mają być dostępne tylko opcje 150, 100 Czy da radę zrobić to wykorzystując tą funkcję ?
Tu coś mi ne działa bo nie blokuje opcji wskazanych w tablicy Ten post edytował david8213 25.11.2018, 09:59:12 |
|
|
25.11.2018, 18:03:12
Post
#48
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Kod const arr = [ [0, 3, 4], [1], [2], [3], [4], [5], [6, 3, 4], [7, 0, 1, 2], [8, 0, 1, 2] ]; function get_el_id(id) { return document.getElementById(id); } var x = []; function loop_options(option) { if(x.length > 1) { x.splice(1,1); x.push(option.slice()); } else { x.push(option.slice()); } x = x.reverse(); if(x.length > 1) { for(var j=1;j<x[1].length;j++) { get_el_id('tree_type').children[x[1][j]].disabled = false; } } for(var i=1;i<option.length;i++) { get_el_id('tree_type').children[option[i]].disabled = true; } } function disable_options() { arr.forEach(function(option) { if(option[0] == get_el_id('trees').selectedIndex) { loop_options(option); } }); } disable_options(); get_el_id('trees').addEventListener('change', disable_options, false); Pierwszy element w podtablicy oznacza kolejno indeks option'a. |
|
|
25.11.2018, 21:02:15
Post
#49
|
|
Grupa: Zarejestrowani Postów: 308 Pomógł: 0 Dołączył: 9.12.2009 Ostrzeżenie: (10%) |
Dziekuję...bardzo mi pomogles
Pięknie działa ale jest mały błąd ... Podczas wyboru ostatnich dwóch opcji jest zrobiona blokada na 300 a domyślnie wybiera 300 a ma być 150 Można jeszcze np ustawić w tablicy dla każdej opcji domyślne ustawienie ? Np dla pierwszych siedmiu 300 a dla ostatnich dwóch 150 ..a najlepiej jakby przy każdym wyborze rury wcześniej się średnica się resetowala gdyby ktoś klikał jak popadnie Ten post edytował david8213 25.11.2018, 21:44:26 |
|
|
26.11.2018, 01:20:17
Post
#50
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Kod const arr = [ [0, 3, 4], [1], [2], [3], [4], [5], [6, 3, 4], [7, 0, 1, 2], [8, 0, 1, 2], [9, 0, 1, 2, 3, 4, 5] ]; function get_el_id(id) { return document.getElementById(id); } var x = []; function loop_options(option) { if(x.length > 1) { x.splice(1,1); x.push(option.slice()); } else { x.push(option.slice()); } x = x.reverse(); if(x.length > 1) { for(var j=1;j<x[1].length;j++) { get_el_id('tree_type').children[x[1][j]].disabled = false; } } for(var i=1;i<option.length;i++) { get_el_id('tree_type').children[option[i]].disabled = true; } } var blank_option2 = false; function first_non_disabled(option, incrementator, recursive) { if(option.length-1===get_el_id('tree_type').children.length) { blank_option2 = true; let new_option = document.createElement('option'); new_option.selected = true; get_el_id('tree_type').add(new_option); get_el_id('tree_type').disabled = true; } else { if(blank_option2 === true) { blank_option2 = false; get_el_id('tree_type').children[get_el_id('tree_type').children.length-1].remove(); get_el_id('tree_type').disabled = false; } if(option[recursive]!==incrementator) { get_el_id('tree_type').children[incrementator].selected = true; } else { recursive++; incrementator++; first_non_disabled(option, incrementator, recursive); } } } function disable_options() { arr.forEach(function(option) { if(option[0] === get_el_id('trees').selectedIndex) { loop_options(option); first_non_disabled(option, 0, 1); } }); } disable_options(); get_el_id('trees').addEventListener('change', disable_options, false); Masz, proszę. Tak jak chciałeś, dopisałem nowy "moduł" do kodu. Jeśli będziesz dodawać nowe opcje do select'a, to będziesz musiał też modyfikować tablicę arr. Od elementu jeden i dalej w podtablicy możesz umieszczać indeksy option'a, który ma być zablokowany (disabled), przykład: Kod const arr = [ [0, 1, 3] ]; Jeśli wybierzesz opcję "oak", czyli zero (0), to wtedy zablokowane zostaną indeksy jeden i trzy (1, 3), czyli "conifer2" i "deciduous2". Powyższy kod dla wybranego option'a o indeksie zero z select'a pierwszego zablokuje możliwość wyboru select'owi drugiemu indeksy jeden i trzy. W ten sposób właśnie umieszczaj dane w tej tablicy. Najpierw indeks option'a w pierwszym select i dalej indeksy, które będą blokowane w drugim select. Jeśli nic, nie ma być zablokowane w drugim select, to wtedy możesz umieścić sam tylko indeks, przykład: Kod const arr = [ [5] ]; Ten zapis w kodzie nie zablokuje żadnego option'a w select drugim, ponieważ jest podany tylko indeks pierwszego option'a (5 - hazel), a opcje do zablokowania nie są podane, więc nic nie zostanie zablokowane w drugim select. Ten post edytował Neutral 26.11.2018, 02:02:49 |
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 09:05 |