Autor Zpráva
Anonymny
Profil *
Pokracujem v uceni JS... a teraz skusam vytvorit si vlastny form system. Ktory bude zvladat kontrolu vstupnych dat.

funkcia ktora kontroluje:


	function zisti(co,kde)  {
		el = document.formular.co;
		if (el.value=="") {
			document.getElementById("kde").style.display='inline';
		}
	}	



CSS:

span#required1,span#required2 {color:red; font: italic 100% arial; display:none}	


html:

<form id="formular" name="formular" action="spracuj.php"  method="post">
	
	<label for="meno">Vaše meno: <input type="text" name="meno" id="meno" value=""></input></label><span id="required1"> Táto položka je povinná</span>
	<br />
	<label for="vek">Vek: <input type="text" name="vek" id="vek" value=""></input></label><span id="required2"> Táto položka je povinná</span>
	<br />
	<input type="button" onClick="zisti('meno,vek');" value="Odoslať"></input>
	
	</form>


Vsetko ide ked nemam parametre vo funkcii.. neviete kde mam chybu?? Dakujem pekne.
fajzen
Profil
tých chýb je tam viac... najväčšia chyba je spôsob, akým kontrolu vykonávaš... takto síce funkcia prebehne (prebehla by, ak by bola správne napísaná), ale formulár sa aj tak odošle... údaje vo formulári sa pomocou JS kontrolujú takto:
do tagu form sa pridá:
<form id="formular" name="formular" action="spracuj.php"  method="post" onsubmit="return zisti();">

kde funkcia zisti() vráti true alebo false. Ak false, odoslanie sa zablokuje (formulár nie je vyplnený správne), ak true, odoslanie sa povolí (formulár je správne vyplnený)

Ďalšie chyby:
1. takto sa k elementu s atribútom name predávaným ako parameter funkcie pristupovať nedá, musíš použiť
document.formular[co]

2. onClick="zisti('meno,vek');" - ak si myslíš, že takto funkcia skontroluje oba prvky, tak sa mýliš, pre JS je to totiž jediný reťazec, nemá ako vedieť, že sú to dva atribúty name... musel by si ich predávať ako pole prvkov alebo objekt... okrem toho funkcia má dva parametre, ty predávaš iba jeden... musí byť niečo takéto:
<form id="formular" name="formular" action="spracuj.php"  method="post" onsubmit="return zisti({'meno':'required1', 'vek':'required2'});">

a potom by funkcia zisti() by mohla vyzerať takto:
function zisti(polia)
{
  var el;
  var ret = true;

  for(var pole in polia) {
    el = document.formular[pole];
    if(el.value == '') {
      document.getElementById(polia[pole]).style.display='inline';
      ret = false;
    }
  }

  return ret;
}


Posledná rada: ak používaš Firefox, odporúčam nainštalovať si Firebug, ten ti ohlási, na ktorom riadku je chyba
Anonymny
Profil *
1. Preco? Na jpw.cz pisu te sa da pristupovat k atributom aj takto napr. form.nieco.nieco a nemusi sa takto - forums.["input"].["input"]...

{'meno':'required1', 'vek':'required2'}) // tomu nerozumiem, nemalo by byt skor {"meno","vek"}.

Ta funkcia for in som este nevidel, musim nastudovat. Zatial viem len for, while, do while.. :)

Ok diky za pomoc.
Peter.
fajzen
Profil
Anonymny:
Na jpw.cz pisu te sa da pristupovat k atributom aj takto napr. form.nieco.nieco
áno, dá sa pristupovať k elementom aj takto, ale nie, keď je to name predávané funkcií ako parameter... takže v tvojej funkcií by mohlo byť
el = document.formular.meno;

ale to čo tam máš ty
el = document.formular.co;

nefunguje, pretože JS si myslí, že chceš prvok s name="co". Ak sa to dá nejak spraviť, aby to išlo aj takto, rád sa nechám poučiť od iných.

{'meno':'required1', 'vek':'required2'}) // tomu nerozumiem, nemalo by byt skor {"meno","vek"}
toto je objekt, kde názov ('meno') znamená name poľa, ktorý sa má kontrolovať a hodnota ('requred1') je ID spanu, ktorý sa ukáže, ak nie pole nie je vyplnené
v objekte sú vždy kombinácie názov : hodnota, kde názov je vlastne názov premennej v objekte
pre lepšie pochopenie:
vaj obj = {'meno' : 'Kuko'}
alert(obj.meno); // vypíše Kuko

ak by si nepotreboval dvojice názov : hodnota, ale iba zoznam nejakých prvkov, na to slúži pole, príklad:
var pole = ['prvy', 'druhy', 'treti'];
for(var i = 0; i < pole.length; i++)
  alert(pole[i]);

ako je vidieť, takto vytvorené pole je číselné, asociatívne polia sa takto myslím vytvárať nedajú, ale namiesto nich sa dajú použiť objekty, s ktorými sa potom dá pracovať ako s asociatívnymi poliami

Každopádne takéto vytváranie polí a objektov je vhodné hlavne keď ho chceš predať do funkcie ako parameter. Príklad bežnejšieho vytvárania a používania polí je na JPW, objektov napr. na intervale
_es
Profil
fajzen:
Ak sa to dá nejak spraviť, aby to išlo aj takto
el = document.formular[co];
Anonymny
Profil *
Aha uz chapem, jasne. Cudne ze to JS nechape..
Fuu este sa mam co ucit :D

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: