Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Chyba v JavaScriptovém kódu

Ahoj, mohl by někdo najít chybu někde v tomto kódu ?

<script ..... >
function zmena(s) {
    var t=s.options[s.selectedIndex].value;		
    if (t=="nova") document.getElementById('div1').style.display="block";
}
</script>

<form name="f1"....>
    <SELECT name="skupina" onChange="zmena(this)">
    ....
    ....
<div id="div1" style="display: none;"> <input type="text" name="t1"> </div>
</form>

Určitě tam někde je, jenže nevim kde, prosím pomozte mi ... Díky všem.

Předmět Autor Datum
este neco: ty indexy u nazvu form name= f>1<m div id= div>1< atd... jsou v php cyklu... takze je ji…
godman 05.01.2007 21:12
godman
Pokud máš ten argument v PHP tak není problém napsat ten kód if (t=="nova") document.getElementById…
Vavi 05.01.2007 21:17
Vavi
:-) Nemá to s PHP žádnou souvislost. Chyba je pravděpodobně v přístupu k prvku select box. Vhodné je…
Flash_Gordon 05.01.2007 21:21
Flash_Gordon
Já odpovídal na ten druhý dotaz: v te javascript funkci je getElementById(' NECO ') a misto toho NE…
Vavi 05.01.2007 21:27
Vavi
Jo. Rozepiš se podrobněji. Nechápu co myslíš a jsem unavený (tam to s tím PHP). Protože pokud si dob…
Flash_Gordon 05.01.2007 21:34
Flash_Gordon
v tom kodu neni chyba,. jen sem se chtel zeptat na toto: jesli ze zaslaneho parametru THIS ve funkc…
Michalis 05.01.2007 21:39
Michalis
Nevím co chceš udělat takže nakonec můžeš narazit velmi hrubě na nějaký zádrhel (viz. moje předchozí…
Flash_Gordon 05.01.2007 21:53
Flash_Gordon
Ak si posielaš do funkcie select, tak k názvu formulára sa dostaneš prostredníctvom select.form.name… poslední
los 06.01.2007 15:23
los

este neco:

ty indexy u nazvu form name= f>1<m div id= div>1< atd... jsou v php cyklu... takze je jich tam treba 50 zacinaji 0 po 49, a dotaz:

v te javascript funkci je getElementById(' NECO ') a misto toho NECO bych tam chtel dat neco 'dynamicky' abych ten javaScript nemusel mi v mem pripade 50x ale jen jednou s tim ze to neco by se menilo div0 potom div1 atd.... to cislo za div se snad da nacist z argumentu ktery ten javascript fukci predavam, ale nevim jak, tak na to se ptam.

:-) Nemá to s PHP žádnou souvislost.
Chyba je pravděpodobně v přístupu k prvku select box.
Vhodné je si jej pojmenovat přes jedinečný identifikátor (ID) nebo k němu přistupovat přes automaticky vytvořené pole.

Můžeš k němu přistupovat postaru nejjednodušeji:

<script ..... >
function zmena() {
    var t=f1.skupina.value;		
    if (t=="nova") document.getElementById('div1').style.display="block";
}
</script>

<form name="f1"....>
    <SELECT name="skupina" onChange="zmena()"> // netreba predavat ukazatel this
    ....
    ....
<div id="div1" style="display: none;"> <input type="text" name="t1"> </div>
</form>

Bez záruky ....

Já odpovídal na ten druhý dotaz:

v te javascript funkci je getElementById(' NECO ') a misto toho NECO bych tam chtel dat neco 'dynamicky' abych ten javaScript nemusel mi v mem pripade 50x ale jen jednou s tim ze to neco by se menilo div0 potom div1 atd.... to cislo za div se snad da nacist z argumentu ktery ten javascript fukci predavam, ale nevim jak, tak na to se ptam.

:-)

Jo. Rozepiš se podrobněji. Nechápu co myslíš a jsem unavený (tam to s tím PHP).
Protože pokud si dobře pamatuji tak některé prohlížeče neposílají hodnoty jiných inputů než ty, které jsou v rámci
formuláře, který byl odeslán.

Co tím myslím ?

<form name='nejakyFormular' >
<input type='text' name='prvniInput' >
</form>

<form name='nejakyFormular2' > 
<input type='text' name='druhyInput' >
</form>

Pokud je odeslán formulář první, pak (tuším Internet Explorer !) neposílá obsah
prvků, které nejsou v rámci formuláře.
Tedy nic z formuláře2 (nejakyFormular2) se neodešle !

v tom kodu neni chyba,. jen sem se chtel zeptat na toto:

jesli ze zaslaneho parametru THIS ve funkcni zmena muzu nejak dostat nazev formulare ve kterem se dany select nachazi. Portoze na radku: if (t=="nova") document.getElementById('div1').style.display="blo ck"; potebuju dynamicky menit strind 'div1' a to takto: jednali se o nazev formulare f1, bude to div1, je-li nazev formulare f2, bude to div2 atd....
protoze na stance techto formularu muze byt X (generovane pres php) a nechci v kazdem cyklu vytvarek dynamicky novou JS funkci zmena1 potom zmena2 zmena3, kdyz se v dane fci bude menit jen ten jeden jiz zminovany strind 'div1' div2 atd...

Nevím co chceš udělat takže nakonec můžeš narazit velmi hrubě na nějaký zádrhel (viz. moje předchozí odpověď)
Co se týče toho formuláře můžeš zjistit o jaký se jedná buďto:

zmena(this.form.id) // předá funkci název identifikátoru
zmena(this.form.name) // Předá funkci jako parametr název formuláře.....

Toto bude funkce volana pri onchange selectboxu.....

:-)

Ak si posielaš do funkcie select, tak k názvu formulára sa dostaneš prostredníctvom select.form.name. K samotnému číslu sa dostaneš už jednoducho metódou substr.

Netestované, takže tam môžu byť chyby, ale je vidno princíp:

function zmena(s) {
    if (s.options[s.selectedIndex].value == "nova")
        document.getElementById("div" + s.form.name.substr(1)).style.display = "block";
}

50 formulárov na stránke? To je celkom dosť. Naozaj potrebuješ odosielať každý formulár na inú adresu?

Zpět do poradny Odpovědět na původní otázku Nahoru