Autor | Zpráva | ||
---|---|---|---|
Pavel Dumbrovský Profil |
#1 · Zasláno: 2. 1. 2011, 18:13:59 · Upravil/a: Pavel Dumbrovský
Dobrý den,
kolega mi zde pomohl s funkcí pro změnu optionů v selectu v závislosti na jiném selectu. Bohužel mi nechce nějak správně valit funkce remove. document.formular.podkategorie.length dává správný počet aktuálních optionů, to jsem testoval i přes alert, ale pořád v tom selectu zůstávají nesmazané optiony, když tam zrovna natáhnu pole s nula prvky, čili má být select s nula optiony a pořád tam zůstavají některé z minulého pole. Absolutně nechápu proč to dělá, zkoušel jsem si hrát s tím cyklem, dával jsem x<100000 apod. , ale prostě je to nesmaže. Tuší někdo, čím by to mohlo být? Děkuju. function setKat() { for (var x=0; x<document.formular.podkategorie.length; x++) {document.formular.podkategorie.remove(x);} if (document.formular.kategorie.value=='1') var podkategorie=podkategorie1; if (document.formular.kategorie.value=='2') var podkategorie=podkategorie2; if (document.formular.kategorie.value=='3') var podkategorie=podkategorie3; if (document.formular.kategorie.value=='4') var podkategorie=podkategorie4; document.formular.podkategorie.options[0]=new Option("Zvolte podkategorii", "0", false, false); for (var i=0; i<podkategorie.length; i++){ document.formular.podkategorie.options[i+1]=new Option(podkategorie [i][1], podkategorie [i][0], false, false); } } Opravdu zajímavé, teď jsem to ještě testoval v cyklu: for (var x=0; x<document.formular.podkategorie.length; x++) {document.formular.podkategorie.remove(x); alert(x); } a alert mi skončil u 9, i když v selectu je 19 optionů. Má snad tato funkce nějaké omezení? |
||
Marek88 Profil |
#2 · Zasláno: 2. 1. 2011, 18:38:42
No pokud ty optiony odmazáváš, tak document.formular.podkategorie.length vrací pokaždé číslo o jedno menší, takže by docela sedělo, že jich odmažeš jen polovičku...
|
||
Pavel Dumbrovský Profil |
#3 · Zasláno: 2. 1. 2011, 18:44:20
To je teoreticky pravda, ale proč se tedy chová naprosto stejně i tento zápis?
for (var x=0; x<100; x++) {document.formular.podkategorie.remove(x); } |
||
Pavel Dumbrovský Profil |
#4 · Zasláno: 2. 1. 2011, 19:09:33
http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=36837
Tady se o tom hovoří, problém vyřešen, ale stejně to úplně nepobírám, zlatý php. :) |
||
Chamurappi Profil |
#5 · Zasláno: 2. 1. 2011, 19:35:12
Reaguji na Pavla Dumbrovského:
„stejně to úplně nepobírám, zlatý php“ Tohle vůbec není anomálie JavaScriptu. Obecně, pokud máš funkci na vyhazování prvku z pole takovým způsobem, že se pole prvků vždy smrskne (po vyhozeném nezůstane prázdné místo), a máš třeba pole pěti prvků, ze kterého vyhodíš nejprve první, pak druhý, pak třetí, pak čtvrtý a nakonec pátý prvek, zůstanou ti v něm tři prvky, protože to první vyhození vyhodí první prvek, druhé třetí, třetí pátý a zbytek nevyhodí nic. Na to stačí docela jednoduché zamyšlení, ne? Kdybys chtěl vyhodit všechno, musel bys vyhazovat od konce, nebo pětkrát vyhodit první prvek. |
||
Pavel Dumbrovský Profil |
#6 · Zasláno: 2. 1. 2011, 20:06:38 · Upravil/a: Pavel Dumbrovský
Ano, v podstatě je to velmi logické, v JS začínám, takže si musím zvyknout na to, že se mi proměnné budou měnit za pochodu.
Zkuste mi ale vysvětlit jednu věc: Mám 4 pole, podle podmínky si jedno vyberu (přiřadím): if (document.formular.kategorie.value=='1') var podkategorie=podkategorie1; if (document.formular.kategorie.value=='2') var podkategorie=podkategorie2; if (document.formular.kategorie.value=='3') var podkategorie=podkategorie3; if (document.formular.kategorie.value=='4') var podkategorie=podkategorie4; proč mi to nefunguje pouze u 2-4 pole a u prvního to šlape ok? Háže to chybu v té podmínce, že 2 má hodnotu null nebo není objekt: if(podkategorie[document.formular.podkategorie.value-1][2]==1){ Netuším co s tím, tak jsem napřed zkusil jaksi vyextrahovat to 2rozměrné pole: var pole = new Array; for (var i=0; i<podkategorie.length; i++){ pole=podkategorie [document.formular.podkategorie.value-1]; } alert(pole); Tady mi to zase háže undefined, ale opět jen u polí 2-4 , první pole mi funguje, co dělám proboha špatně? Přitom když si vypíšu všechna 4 pole třeba do alertu kompletní, tak je to ok, to samé výpis do selectu taky šlape.. Děkuju. :) |
||
Pavel Dumbrovský Profil |
#7 · Zasláno: 2. 1. 2011, 20:18:25
Asi už jsem na to přišel, dávám tam blbý value do toho formu, moje chyba.
|
||
Witiko Profil |
#8 · Zasláno: 4. 1. 2011, 22:40:30
Pavel Dumbrovský:
Jsi si vědomý toho, že v jedné funkci 4x deklaruješ tu samou proměnnou? |
||
Časová prodleva: 13 let
|
0