Autor Zpráva
amorekj
Profil
Dobrý den,
chtěl bych se zeptat, jak formulář ověřit, když se neodesílá přes tlačítko, ale přes odkaz. Přikládám kód:
<script type="text/javascript">
    <!--
    function kontrola() {
      var zprava="";
      if(document.getElementsByName("od")[0].value=="" || document.getElementsByName("od")[0].value=="@") {zprava+="Zadejte Váš email\n";}
      if(document.getElementsByName("predmet")[0].value=="") {zprava+="Zadejte předmět zprávy\n";}
      if(document.getElementsByName("spam")[0].value!="11") {zprava+="Zadejte správnou odpověď kontroly spamu\n";}
      if(document.getElementsByName("zprava")[0].value=="") {zprava+="Zadejte Vaši zprávu\n";}
 
      if(zprava==""){
        document.getElementById('ContactForm').submit();
        return true; } // data budou odeslána
      else {
        alert(zprava);  // zobrazení zprávy o chybách
        return false;   // data nebudou odeslána
      }
    }
    //-->
</script>
<form action="#!/odeslano" id="ContactForm" name="kontakt" method='post'">

            <input type="text" class="input" value="@" maxlength="50" name="od">
            <input type="text" class="input" maxlength="50" name="predmet">
            <input type="text" class="inputspam" maxlength="2" name="spam"> &nbsp;(kolik je 6 + 5)
            <textarea name="textarea" cols="1" rows="1" name="zprava"></textarea>


        <a href="#" class="button1" onClick="document.getElementById('ContactForm').reset()"><strong>Smazat</strong></a>
        <a href="#" class="button1" onClick="kontrola()"><strong>Odeslat</strong></a> 
</form>

Děkuji všem za rady.
Keeehi
Profil
Nevidím problém.

Je ti doufám jasné, že bez zapnutého javascriptu ten formulář uživatel neodešle a že je to špatně.
amorekj
Profil
Když zmáčknu odkaz a nevyplním nic tak se nic nestane a mělo by to napsat, jaký políčka mám dovyplnit. Chyba tam někde musí být.

Jinak díky za upozornění. Jsem si toho vědom. Beru to tak, že většina lidí javascript má zapnutý.
lionel messi
Profil
amorekj:
Chyba tam někde musí být.
Skutočne „tam niekde“ je. Po spustení tvojej ukážky totiž vidím chybu: Type Error: document.getElementsByName(…)[0] is undefined.

Radšej by som dal inputom id a použil document.getElementByID("idecko"). Vieš o tom, že metóda document.getElementByName("nazev") nie je v Opere a IE (netuším, akých verzií presne sa to týka) na 100 % spoľahlivá?
amorekj
Profil
Když jsem to upravil, že jsem do inputů vložil ID. Po stisku tlačítka mi to píše následující chyby:

Uncaught TypeError: undefined is not a function
kontrola
onclick

Uncaught TypeError: Cannot read property 'slice' of undefined
(anonymous function)
f.event.handle
i.handle.k
lionel messi
Profil
amorekj:
Po stisku tlačítka mi to píše následující chyby:
Ukáž predmetný kód funkcie kontrola() a HTML formulára po zmene.
Chamurappi
Profil
Reaguji na amorkaj:
Co je to za nesmysl používat místo <input>ů odkazy? Fuj.
Použil bych normální <input type="submit"> (podotýkám, že samozřejmě může vypadat jakkoliv, vzhled určuje CSS) a pak dal onsubmit="return kontrola(this)" na <form>. Uvnitř function kontrola(form) bych pak zkoumal form.od.value, form.predmet.value atd., bez jakéhokoliv volání getElementNěco. Žádné document.getElementById('ContactForm').submit() bych také nevolal.

Beru to tak, že většina lidí javascript má zapnutý.
Proč se spokojit jen s většinou, když to jde s mnohem menším úsilím udělat mnohem přístupnější?

Cannot read property 'slice' of undefined
Tuto chybu ti musí hlásit něco jiného, slice přeci nikde nemáš. Nebo jsi nám neukázal skutečný kód.

if(document.getElementsByName("spam")[0].value!="11") {zprava+="Zadejte správnou odpověď kontroly spamu\n";}
Proč mu ji nevyplníš rovnou sám? Snad nevěříš, že spamovací robot bude narážet na tuto JS kontrolu.
Mrkni do zdrojáku této diskuse, je tu antispamové políčko, které rovnou vyplňuje a skrývá skript (takže obtěžuje jen lidi bez zapnutého JS).


Reaguji na lionela messiho:
použil document.getElementByID
Malé D. Ale to amorekj odhalil, jinak by dostával jinou chybovou hlášku.
amorekj
Profil
Malé D mě zachránilo.

Děkuji: Chamurappi a lionel messi

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: