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