Autor | Zpráva | ||
---|---|---|---|
Hitman Profil |
#1 · Zasláno: 2. 6. 2015, 23:15:18
Dobrý den,
chtěl bych si udělat jednoduchou validaci formuláře s tím že v případě chyby chci zastavit odesílání. Mám to nějak takto: $('#registrovat_se').click(function() { if((("#jmeno").val().length > 1)){ return true; } else { $("#vypis_chybu").text('Pole nebylo vyplněno'); return false; } }); #registrovat se je ID u odesílacího tlačítka. Pokud jsem to správně pochopil, pokud by tam nebyl ten výpis chyby tak by to fungovalo správně. Pokud tam ale je, tak funckce vrátí tuto hodnotu a "return false" se tak už neprovede. Je to tak? Pokud ano, jak zároveň zastavit odeslání a vypsat nějaký aleret? |
||
Dan Charousek Profil |
#2 · Zasláno: 2. 6. 2015, 23:23:13
Místo click použij pro formulář metodu
.submit()
|
||
Časová prodleva: 9 dní
|
|||
Hitman Profil |
#3 · Zasláno: 11. 6. 2015, 17:55:25 · Upravil/a: Hitman
I tak ale dojde k obnovení stránky, lze i tomu zamezit?
Ještě jsem zkoušel změnit odesílací tlačítko na: type="button" onclick='validateForm()' A potom v JS: function validateForm() { document.form.getElementById('id_formulare').submit(); } Ale bohužel, nefunguje... |
||
Dan Charousek Profil |
#4 · Zasláno: 12. 6. 2015, 00:33:53
Zkus samotné
$('#registrovat_se').submit(function() { return false; }); Určitě by to mělo fungovat. Případně se podívej do konzole, zda nevypisuje nějakou chybu, pokud bys měl chybu v javascriptu, tak se formulář odešle bez zastavení. |
||
_es Profil |
#5 · Zasláno: 12. 6. 2015, 02:42:31
Dan Charousek:
> Zkus samotné > $('#registrovat_se').submit(function() { > return false; > }); > Určitě by to mělo fungovat. Viď Hitman: „#registrovat se je ID u odesílacího tlačítka“ Tá udalosť má byť nastavená pre formulár, nie pre odosielacie tlačítko, teda to fungovať nemôže. Hitman: Ide vôbec o normálny formulár, teda značku <form> ? Ako vyzerá?
|
||
Dan Charousek Profil |
#6 · Zasláno: 12. 6. 2015, 09:18:46
_es:
Pravda, nepřečetl jsem si pořádně původní příspěvek. Hitman: Jak říká _es, událost submit musí být odchytávána nad celým formulářem ne na tlačítku. |
||
Hitman Profil |
Tak už jsem přišel na to proč to nefungovalo...
Proč: $('form#registrovat_se').submit(function() { var hodnota= ("#ico").val().length; return false; }); Nefunguje a pokud ostraním var hodnota= ("#ico").val().length; tak to funguje správně?
Jinými slovy - pokud to správně chápu, pokud v té funkci provedu třeba nějký výpis na obrazovku, už nemůžu vrátit rerurn false, protože funckce už vrací ten výpis. Ale proč nemůžu ani pracovat s proměnnými? Co vlastně můžu mít ve funkci před return false? Připadá mi že pokud tam dám cokoliv tak return false už nefunguje a formulář se odešle... Jde mi to, abych ve výsledku měl něco jako: $('form#registrovat_se').submit(function() { var jmeno= ("#jmeno").val().length; var email= ("#email").val().length; if(email < 3){ $("#chyba").text('Vyplňte prosím email'); } else if(f(jmeno < 3)){ $("#chyba").text('Vyplňte prosím jméno'); } return false; }); To ale není možné, protože potom se formulář odešle... |
||
Chamurappi Profil |
#8 · Zasláno: 12. 6. 2015, 13:04:01
Reaguji na Hitmana:
„Ještě jsem zkoušel změnit odesílací tlačítko na type="button" onclick='validateForm()' “
To nedělej, nešlo by to odeslat bez JS. „Ale proč nemůžu ani pracovat s proměnnými?“ Co očekáváš, že ("#ico").val().length udělá? Zápis ("#ico") vrátí řetězec, řetězec nemá metodu val => vyskočí výjimka. Stačilo by zapnout debugování v prohlížeči a viděl bys ji.
Proti odmazávání jQuery nic nenamítám, ale musí se to udělat správně, nejde jen umazat dolar :-) Bez frameworku by to šlo napsat třeba takhle: registrovat_se.onsubmit = function() { if(this.email.length < 3) chyba.innerHTML = "Vyplňte prosím e-mail."; else if(this.jmeno.length < 3) chyba.innerHTML = "Vyplňte prosím jméno."; else return true; return false; }; email a jmeno jsou name , ne id .)
Nebo by to šlo strčit celé přímo do atributu onsubmit :
<form onsubmit="return !(chyba.innerHTML = (email.length > 2 ? jmeno.length > 2 ? '' : 'Vyplňte prosím jméno' : 'Vyplňte prosím e-mail'))"> Nevím, co ve tvém kódu má dělat ta funkce uvnitř if(f(jmeno < 3)) .
|
||
Hitman Profil |
#9 · Zasláno: 12. 6. 2015, 15:00:38
Chamurappi:
To nedělej, nešlo by to odeslat bez JS. To jsem si právě taky říkal, ale už jsem byl v situaci kdy mi to bylo skoro jedno, hlavně když to nějak půjde... Omlouvám se, opravdu to byly překlepy co způsobovalo onu chybu. Budu se muset naučit používat debugger. Díky moc |
||
Časová prodleva: 9 let
|
0