Autor Zpráva
mackopu
Profil
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
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
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
Něco podobného jem řešil i tady, ale nemůžu to rozchodit. Poradíte?
_es
Profil
mackopu
To vstup.policko[] spôsobí syntaktickú chybu hneď na prvom príkaze funkcie.
zvěřiňák
Profil *
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 *
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
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
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
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 *
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
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.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0