Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 17. 3. 2009, 13:19:33 · Upravil/a: mackopu
Potřebuji kontrolovat obsah formulářových prvků, které jsou zapsány jako pole prvků:
<SCRIPT language=JavaScript> <!-- function kontrola(vstup) { if (vstup.policko[].value == '') { alert('Vložte text do políčka 1!'); vstup.policko[].focus(); return false; } if (vstup.policko[].value == '') { alert('Vložte text do políčka 2!'); vstup.policko[].focus(); return false; } if (vstup.policko[].value == '') { alert('Vložte text do políčka 3!'); vstup.policko[].focus(); return false; } else { return true; } } // --> </SCRIPT> <form method="POST" enctype="multipart/form-data" action="" onsubmit="return kontrola(this)"> <input type="text" name="policko[]" size="20"> <input type="text" name="policko[]" size="20"> <input type="text" name="policko[]" size="20"> <input type="submit" value="Odeslat" name="go"> </form> Uvedená funkce nefunguje. Jak na to? |
||
Senky Profil |
#2 · Zasláno: 17. 3. 2009, 14:14:43
Ale ved nemozes predsa pouzit na 3 inputy stale rovnake name, nazvi jedno co ja viem policko[1], druhe policko[2] a tretie napriklad policko[3]... A jednoduchsie je nazvat form najakym name ako potom pisat "this"...
|
||
mackopu Profil |
#3 · Zasláno: 17. 3. 2009, 14:19:01
Ale samozřejmě že mohu, to je běžné. A také musím, protože předem neznám počet inputů a formulář dále zpracovávám PHP skriptem.
|
||
mackopu Profil |
#4 · Zasláno: 18. 3. 2009, 14:36:28
Něco podobného jem řešil i tady, ale nemůžu to rozchodit. Poradíte?
|
||
_es Profil |
#5 · Zasláno: 18. 3. 2009, 14:43:53
mackopu
To vstup.policko[] spôsobí syntaktickú chybu hneď na prvom príkaze funkcie. |
||
zvěřiňák Profil * |
#6 · Zasláno: 18. 3. 2009, 17:03:12
Takhle to funguje docela dobře:
<SCRIPT language=JavaScript> <!-- function kontrola(vstup) { if (vstup.policko[0].value == '') { alert('Vložte text do políčka 1!'); vstup.policko[0].focus(); return false; } if (vstup.policko[1].value == '') { alert('Vložte text do políčka 2!'); vstup.policko[1].focus(); return false; } if (vstup.policko[2].value == '') { alert('Vložte text do políčka 3!'); vstup.policko[2].focus(); return false; } else { return true; } } // --> </SCRIPT> <form method="POST" enctype="multipart/form-data" action="" onsubmit="return kontrola(this)"> <input type="text" name="policko" size="20"> <input type="text" name="policko" size="20"> <input type="text" name="policko" size="20"> <input type="submit" value="Odeslat" name="go"> |
||
zvěřiňák Profil * |
#7 · Zasláno: 18. 3. 2009, 19:22:20
Pokud těch inputů bude víc a všechny stejného jména, bude asi lepší použít cyklus for. Pro ty tři inputy by to bylo třeba takhle:
<SCRIPT language=JavaScript> <!-- function kontrola(vstup) { for (i=0; i<3; i++) { if (vstup.policko[i].value == '') { alert('Vložte text do políčka '+(1+i)+' !'); vstup.policko[i].focus(); return false; } else { continue; } } } // --> </SCRIPT> <form method="POST" enctype="multipart/form-data" action="" onsubmit="return kontrola(this)"> <input type="text" name="policko" size="20"> <input type="text" name="policko" size="20"> <input type="text" name="policko" size="20"> <input type="submit" value="Odeslat" name="go"> </form> |
||
mackopu Profil |
#8 · Zasláno: 18. 3. 2009, 20:18:13
To je pravda, takhle to funguje. Ve zpracovatelském PHP skriptu ale hodnoty políček projíždím také v cyklu, takže nezbytně potřebuji ten tvar policko[], aby z nich bylo pole.
Ukázka zpracovatelského skriptu: <?php for($i=0; $i<Count($policko); $i++) { // například jen vypíši jejich obsah echo $policko[$i]; } ?> |
||
joe Profil |
#9 · Zasláno: 18. 3. 2009, 20:33:18
mackopu
I když nevíš kolik inputů bude, nic ti nebrání si je očíslovat, 1...N. Pokud se ti nelíbí číslování, pak si můžeš ke každýmu inputu přidat třídu nebo id, u které budeš stejně muset číslovat a podle ni pak najdeš políčko, kterému bus nastavil fokus, není co řešit :-) |
||
Chamurappi Profil |
#10 · Zasláno: 18. 3. 2009, 20:41:30
Reaguji na mackopu:
Na popis postupu, jak pracovat s takto pojmenovaným <input>em, sis odkázal v příspěvku #4. Jednoduše místo vstup.policko použiješ vstup["policko[]"]. |
||
zvěřiňák Profil * |
#11 · Zasláno: 18. 3. 2009, 21:27:38
mackopu
Chamurappi má pravdu, jde to takhle, jenom tam nesmí být ta tečka mezi "vstup" a "poličko". Takže ta fce kontrola bude teď vypadat takhle: function kontrola(vstup) { for (i=0; i<3; i++) { if (vstup["policko[]"][i].value == '') { alert('Vložte text do políčka '+(1+i)+' !'); vstup["policko[]"][i].focus(); return false; } else { continue; } } } |
||
mackopu Profil |
#12 · Zasláno: 18. 3. 2009, 21:30:24
Tak už to běhá:
<SCRIPT LANGUAGE="JavaScript"> function kontrola(vstup) { for(var i=0; i<vstup["policko[]"].length; i++) { str = vstup["policko[]"][i].value; if(str == "") { alert("Vložte text do políčka č. " + (i+1)); vstup["policko[]"][i].focus(); return false; } } }; </SCRIPT> <form method="POST" enctype="multipart/form-data" action="" onsubmit="return kontrola(this)"> <input type="text" name="policko[]" size="20"><br> <input type="text" name="policko[]" size="20"><br> <input type="text" name="policko[]" size="20"><br> <input type="submit" value="Odeslat" name="go"> </form> zvěřiňák - Teď koukám, že jsme se minuli o pár minut :-) Díky všem za pomoc. |
||
Časová prodleva: 15 let
|
0