Autor Zpráva
Pavel Dumbrovský
Profil
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
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
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
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
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
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
Asi už jsem na to přišel, dávám tam blbý value do toho formu, moje chyba.
Witiko
Profil
Pavel Dumbrovský:
Jsi si vědomý toho, že v jedné funkci 4x deklaruješ tu samou proměnnou?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: