| 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: 17 let
|
|||
0