Autor Zpráva
Hitman
Profil
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
Místo click použij pro formulář metodu .submit()
Hitman
Profil
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
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
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
_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
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;
};
(Při čemž 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
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

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:

0