Autor Zpráva
Eja
Profil *
Ahoj,
mám takový formulář, do kterého bych potřebovala dostat ještě část, kdy by při nevyplnění jména, telefonu a adresy vyskočila hláška: "Nebyla vyplněna povinná pole!" nebo něco podobného. Jak na to? Děkuji moc.

V HTML:
 <form name="objednavka" action="odeslan.html">
  <table>
    <tr>
      <td>Vaše jméno:</td>
      <td><input type="text" name="jmeno"></td>
    </tr>
    
    <tr>
      <td>Váš telefon:</td>
      <td><input type="text" name="telefon"></td>
    </tr>
    
    <tr>
      <td>Adresa doručení:</td>
      <td><input type="text" name="adresa"></td>
    </tr>

    <tr>
      <td>Den:</td>
      <td>
        <select name="vyber">
          <option value="pondeli">Pondělí</option>
          <option value="utery">Úterý</option>
          <option value="streda">Středa</option>
          <option value="ctvrtek">Čtvrtek</option>
          <option value="patek">Pátek</option>
      </select>
      </td>
    </tr>
    
    <tr>
      <td>Polévka:</td>
      <td>
        <input type="text" name="polevka" value="Zadejte počet porcí"><br>
      </td>
    </tr>
  
    <tr>
      <td>Hlavní jídlo:</td>
      <td>
        <input type="text" name="jidlo" value="Zadejte počet porcí"><br>
      </td>
    </tr>
  
    <tr>
      <td>Dezert:</td>
      <td>
        <input type="text" name="dezert" value="Zadejte počet porcí"><br>
      </td>
    </tr>
    
    <tr>
      <td>Chci malou porci:</td>
      <td>
        <input type="checkbox" name="mala">
      </td>
    </tr>
    
    <tr>
      <td colspan="2">Slevy:
      <select name="sleva">
        <option value="plna">Normální</option>
        <option value="student">Student</option>
      </select>
      </td>
    </tr>  

    <tr>
      <td>Cena celkem:</td>
      <td>
        <input type="text" name="celkem">
      </td>
    </tr>
    
  </table>
  
  <input type="button" value="Spočítej" onclick="objednavky()">
  
  <p align="right"><input type="submit" class="button" value="Odeslat">
    <input type="reset" value="Vymazat"></p>
  </form>

V PHP:

  <script>
    function objednavky() {
    var polevka = 25;
    var jidlo = 85;
    var dezert = 25;
    var mala = 0.8;
    var slevaStudent = 0.95;
    var celkem = eval(document.objednavka.polevka.value)*polevka;
    celkem += eval(document.objednavka.jidlo.value)*jidlo;
    celkem += eval(document.objednavka.dezert.value)*dezert;
    if(document.objednavka.mala.checked) {
       celkem = celkem*mala;    
    }
    switch (document.objednavka.sleva.value){
     case "student": 
       celkem = celkem*slevaStudent;
        break;
      }
    if(document.objednavka.polevka.value) or (document.objednavka.jidlo.value) or (document.objednavka.dezert.value) or (document.objednavka.)
    
    document.objednavka.celkem.value = celkem;
   } 
  </script>
Taps
Profil
Eja:
zkus použít
<form name="objednavka" action="odeslan.html"onSubmit="return objednavky()">
maks
Profil
Eja:
jak píše Taps, v případě špatn vyplněného formuláře se musí vrátit na onsubmit return false.

Tzn. ještě musíš dodat do funkce objednavky return false pro případ, kdy ěnco není (správně) vyplněno.
Nebo onsubmit="objednavky return false" (nejsem si jist, jestli bude fungovat).
_es
Profil
maks:
Nebo onsubmit="objednavky return false" (nejsem si jist, jestli bude fungovat).
Nebude, je to syntakticky chybne.
maks
Profil
_es:
samozřejmě, myslel jsem objednavky(); return false. To je s. správně, ale funkčností si jist nejsem (nemohu teď testovat).

NIcméně návratová hodnota rovnou ve funkci se mi zdá být lepší, to i píšu výše.
_es
Profil
maks:
myslel jsem objednavky(); return false
No ale to by sa predsa formulár neodoslal nikdy - jedine, že by ho odoslala funkcia objednavky, čo je zase zbytočne komplikované.
pako
Profil *
Ten skript co mas napisany je pekna divocina ;)
Na overenie vyplnenia policok asi mozes pouzit nieco ako na riadku 19 s tym, ze pouzijes operator &&. Takisto by si mal or nahradit operatorom ||, kedze or v takejto podobe v javascripte neexistuje.
Ked potrebujes z inuputu vydolovat cislo pouzi nejaku funkciu urcenu na prevod retazca na cislo, napriklad Number alebo mozes ziskat ciselnu cast s parseInt.
_es
Profil
Eja:
Podľa [#1] je to vraj „v PHP“. Kde v PHP? JavaScript je súčasť HTML kódu.
Eja
Profil *
Není to PHP, je tam chyba, mělo tam být napsané JavaScript, omlouvám se :)

A kde mám pak nastavit, která políčka budou povinná (potřebuji, aby povinná byla jen 3, zbytek nemusí být vyplněný) a nastavím svou hlášku? To právě nevím :( Když použiji řešení od Taps, tak mi to vrátí formulář k vypsání pokaždé, když člověk nevyplní i pole, které vyplněné být nemusí (např. pole polévka, kde může, ale nemusí napsat počet ks polévky)... Děkuji moc.
maks
Profil
Eja:
na ř. 19
if (!document.objednavka.polevka.value || !document.objednavka.jidlo.value) { // vsechna povinna pole
    return false;
}

ale celkově to je hrozný paskvil. Ty evaly tam nemají co dělat. Například.
hrouda
Profil
jsem začátečník ale zkusil bych dat required a dat javascript pokud to nebude vypsáno
Taps
Profil
hrouda, Eja:
níže uvedené
<input type="text" name="nazev" required>
však nebude funkční ve verzi IE<=9
Samozřejmě že je vhodné validaci ošetřit i na straně php

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: