Autor Zpráva
dickulus
Profil
Dobrý den,
prosím poraďte mi proč se při odeslání formuláře u radiobuttonu tiskárna odešle hodnota "undefined" a jak udělat, aby se odeslala hodnota ano nebo ne.

Zdrojový kód je takovýto:
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <title>Java Script</title>
  
  <script language="JavaScript">
  <!--
  
  function Zpracuj(form) {
  var data = document.Formular;
  var prd = "";
  var info= "";
  
  prd =  "\n\n"
  prd +="Titulek stránky: "+document.title + "\n";
  prd +="Adresa stránky: "+document.location + "\n";
  prd +="Použitý prohlížeč: "+document.appName + ", ";
  prd +="Verze: "+document.appVersion + "\n\n";
  info+="Počítač: "+data.druh.value+"\n";
  info+="Operační systém: "+data.os.value+"\n";
  info+="Procesor: "+data.procesor.value+" ";
  info+=" na frekvenci: "+data.freq.value + "GHz" + "\n";
  info+="Pevný disk: "+data.hdd.value + "GB" + "\n";
  info+="RAM: "+data.ram.value + "GHz" + "\n";
  info+="Monitor: "+data.monitor.value + "\n";
  info+="Tiskrárna: "+data.tisk.value + "\n";
  info+="Skener: "+data.scan.value + "\n";
  info+="Chci dokoupit: "+data.chci.value + "\n";
  
  form.Anketa.value = info + data;
  
  alert("Váš email bude odeslán:\n\n"+ form.Anketa.value);
  }
  //-->
  </script>
  </head>
  
  <body>
    <form name="Formular">
    <h2>Jaký máte počítač?</h2>
    <table widht="480" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width=100>Druh počítače: </td>
      <td><select name="druh" >
          <option value="stolní_počítač">stolní počítač</option>
          <option value="notebook,laptop">notebook, laptop</option>
          </select>
      </td>
    </tr>
    <tr>
      <td>Operační systém: </td>
      <td><select name="os" >
          <option value="Starší_než_Windows_2000">Starší než Windows 2000</option> 
          <option value="Windows_2000">Windows 2000</option>
          <option value="Windows_xp">Windows XP</option>
          <option value="Windows_vista">Windows Vista</option>
          <option value="Windows_7">Windows 7</option>
          <option value="Linux">Linux</option>
          </select>
      </td>
    </tr>
    <tr>
      <td>Procesor: </td>
      <td><select name="procesor">
          <option value="Intel">Intel</option>
          <option value="AMD">AMD</option>
          <option value="Cyryx">Cyryx</option>
          <option value="jiný">Jiný</option>
          </select>
          na frekvenci
          <input type="text" name="freq" size="5" placeholder="např. 2,2"> GHz
      </td>                           
    </tr>
    <tr>
      <td>Velikost pevného disku: </td>
      <td><input type="text" name="hdd" size="5" placeholder="např. 250"> GB
      </td>
    </tr>
    <tr>
      <td>Velikost RAM paměti: </td>
      <td><input type="text" name="ram" size="5" placeholder="např. 1,5"> GHz
      </td>
    </tr>
    <tr>
      <td>Velikost monitoru: </td>
      <td><select name="monitor">
          <option value="menší_než_14">menší než 14</option>
          <option value="14">14</option>
          <option value="15">15</option>
          <option value="16">16</option>
          <option value="17">17</option>
          <option value="18">18</option>
          <option value="18">18</option>
          <option value="19">19</option>
          <option value="20">20</option>
          <option value="21">21</option>
          <option value="větší_než_21">větší než 21</option>
          </select></td>
    </tr>      
    <tr>
      <td>Máte tiskárnu? </td>
      <td><input type="radio" name="tisk" value="ano">Ano<br>
          <input type="radio" name="tisk" value="ne">Ne<br></td>
    </tr>
    <tr>
      <td>Máte skener? </td>
      <td><input type="radio" name="scan" value="ano">Ano<br>
          <input type="radio" name="scan" value="ne">Ne<br></td>
    </tr>
    </table> 
    <br><br>
    <h2>Co chcete dokoupit ke svému počítači (hardware)?</h2>
    <textarea name="chci" cols="50" rows="5"></textarea> 
    <br><br>
    <input type="reset" value="Vymazat formulář">
    </form>
    
    <form action="mailto:jiri.sada@gmail.com?subject=Formulař"
          method="post" enctype="text/plain" name="Druhy"
          onsubmit="Zpracuj(this)">
    <input type="hidden" name="Anketa" value>
    <input type="submit" value="Odeslat na server"> 
    </form>         
  </body>
</html>

Při odeslání se v okně alert objeví všechno správně až na řádek Tiskárna: u kterého se vypíše hodnota "undefined".
Pole bylo vyplněné.

Děkuji dickulus
candiess
Profil
dickulus:
undefined = neznama hodnota, zkus se podívat do konzole kde je problém, většinou je undefined protože se daná hodnota ani nepošle, měl bysi to ošetřit nějakou kontrolou hodnot formuláře (existuje spostu hotových řešení)
Chamurappi
Profil
Reaguji na dickula:
info+="Tiskrárna: "+data.tisk.value + "\n";
V data.tisk je kolekce těchto elementů:
         <input type="radio" name="tisk" value="ano">Ano<br>
         <input type="radio" name="tisk" value="ne">Ne<br>
Kolekce nemá vlastnost value, proto dostáváš undefined. Vlastnost value mají až její členové, tedy data.tisk[0] a data.tisk[1], jenže z value nepoznáš, která hodnota je zatržená. Musíš si zjistit, který člen je checked, tedy jestli je data.tisk[0].checked, vepsat data.tisk[0].value, a jestli je data.tisk[1].checked, vepsat data.tisk[1].value.


Reaguji na candiesse:
zkus se podívat do konzole kde je problém
Tam se žádnou chybu nedočte.

většinou je undefined protože se daná hodnota ani nepošle
Není pravda.

měl bysi to ošetřit nějakou kontrolou hodnot formuláře
Nechápu, jak by mu to pomohlo.

(existuje spostu hotových řešení)
Mně je víc podezřelý kód plný hotového balastu, tobě očividně naopak :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: