2016-04-01 9 views
2

私はフォームから入力した値を使用してクッキーを書く必要があり、ドロップダウンから選択した値を取得する方法を見つけることができません。メニューをクッキーとして保存します。 HTML selectで選択した項目の値を取得するためにJavascriptを使用してクッキー(およびクリーム)のコードを書く

Javascriptを

/* this function attachs the event handler under both event models */ 
    function addEvent(object, evName, fnName, cap) { 
     if (object.attachEvent) 
      object.attachEvent("on" + evName, fnName); 
     else if (object.addEventListener) 
      object.addEventListener(evName, fnName, cap); 
    } 



    function writeCookie(cName, cValue, expDate, cPath, cDomain, cSecure) { 
     if (cName && cValue != "") { 
     var cString = cName + "=" + escape(cValue); 
     if (expDate) 
      cString += ";expires=" + expDate.toGMTString(); 

     if (cPath) cString += ";path=" + cPath; 
     if (cDomain) cString += ";domain=" + cDomain; 
     if (cSecure) cString += ";secure"; 


     document.cookie = cString; 
     } 
    } 

    function saveMailingInfo() { 
     var expire = new Date(); 
     expire.setFullYear(expire.getFullYear() + 1); 
     var allFields = document.mailingForm.elements; 
     for (var i = 0; i < allFields.length; i++) { 
     if (allFields[i].type == "text") { 
      writeCookie(allFields[i].id, allFields[i].value, expire); 
     } 
     if (allFields[i].nodename == "SELECT") { 
      writeCookie(allFields[i].id, allFields[i].selectedIndex, expire); 
     } 
     if (allFields [i].type == "radio" || allFields[i].type == "checkbox") { 
     writeCookie(allFields[i].id, allFields[i].checked, expire); 
    } 
     } 
     alert("Registration data saved"); 
    } 

    addEvent(window, "load", initPage, false); 

    function initPage(){ 
     document.getElementById("sbutton").onclick = saveMailingInfo; 
     document.getElementById("favoriteCake").selectedIndex = retrieveCookie("favoriteCake"); 
    } 

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <!-- DW6 --> 
    <head> 
    <!-- 



    --> 
    <title>Cakes by Emily</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" href="main.css" type="text/css" /> 
     <script type="text/javascript" src="cakeForm.js"></script> 

    </head> 
    <body > 
    <div class="head" id="header"> 
     <p><img src="cake.jpg" alt="cake picture" /><img src="logo.gif" alt="Cakes by Emily" width="400" height="125" /></p> 
     <div class="links" id="navigation"> 
     <a href="#">Home</a> 
     <a href="#">Cakes</a> 
     <a href="#">Pastries</a> 
     <a href="#">Pies</a> 
     <a href="#">Mailing List</a> 
     </div> 
    </div> 
    <div class="mainContent"> 
    <p>Enter your info to be added to our email list with reminders about getting that birthday 
    cake you want! Remember at Cakes by Emily, we aim to make every birthday the best!</p> 
    <form name="mailingForm" > 
    <table> 
     <tr> 
     <td> 
     First: 

     </td> 
     <td> <input type="text" name="firstName" id="firstName"><BR> 
     </td> 
    </tr> 
     <tr> 
     <td> 
     Last: 
     </td> 
     <td><input type="text" name="lastName" id="lastName" ><BR> 
     </td> 
    </tr> 
     <tr> 
     <td> 
     E-Mail: 

     </td> 
     <td><input type="text" name="email" id="email" ><BR> 
     </td> 
    </tr> 
     <tr> 
     <td> 
     Birthday (mm/dd/yyyy): 

     </td> 
     <td><input type="text" name="birthday" id="birthday" ><BR> 
     </td> 
    </tr> 
     <tr> 
     <td> 
     Favorite Cake: 

     </td> 
     <td> 
     <select id="favoriteCake"> 
     <option value="ButterCream">Butter Cream</option> 
     <option value="Chocolate">Chocolate</option> 
     <option value="Vanilla">Vanilla</option> 
     <option value="RedVelvet">Red Velvet</option> 
     </select><BR> 
     </td> 
    </tr> 
     <tr> 
     <td> 
     Frequency of Emails: 

     </td> 
     <td><input type="radio" name="frequency" id="frequency1" >Email me monthly<BR> 
      <input type="radio" name="frequency" id="frequency2" >Email me quarterly<BR> 
      <input type="radio" name="frequency" id="frequency3" >Email me near my birthday<BR> 
     </td> 
    </tr> 
    </table> 
    <input type="submit" id="sbutton" name="sbutton" value="Join our mailing List" /> 
    <input type="reset" value="Reset the form" /> 
    </form> 
    </div> 
    <div class="footer"> 
    </div> 
    </body> 
    </html> 

答えて

0

、使用:

var cake = document.getElementById("favoriteCake"); 
var cakeValue = cake.options[cake.selectedIndex].value; 

また、私は助けることが予告することはできませんあなたのifステートメントのほとんどがオプションの中かっこを利用していますここで

if (object.attachEvent) 
     object.attachEvent("on" + evName, fnName); 
    else if (object.addEventListener) 
     object.addEventListener(evName, fnName, cap); 

あなたがこれを行うべきではない理由の良い例です:

if (cPath) cString += ";path=" + cPath; 

これはcPathtrueであれば、それはのように見えるし、コードを分岐が一つだけのステートメントが含まれている中括弧中括弧を省略すると、テストに続く最初の文またはコードがその枝に入るときにelseのみが実行されるようにJavaScriptランタイムに指示するため、同じ行に続くコードが実行されますが、path=" + cPath;が常に実行されます。

これは、最終的にプログラムにバグが発生する非常に悪い習慣です。

if (object.attachEvent){ 
     object.attachEvent("on" + evName, fnName); 
    } else if (object.addEventListener) { 
     object.addEventListener(evName, fnName, cap); 
    } 

そして:常に中括弧を使用して支店コードを囲む

if (cPath) { 
     cString += "; 
     path=" + cPath; 
    } 

最後に、あなたのクロスブラウザイベント・配線機能付:

/* this function attachs the event handler under both event models */ 
function addEvent(object, evName, fnName, cap) { 
    if (object.attachEvent) 
     object.attachEvent("on" + evName, fnName); 
    else if (object.addEventListener) 
     object.addEventListener(evName, fnName, cap); 
} 

あなたは、のみ含めるべきではありません中括弧はテスト順序を切り替えることでパフォーマンスを向上させることができます。 attachEventはIE 8以降のためだけであるため、あなたのテストが本当であるという稀なシナリオになるでしょうが、毎回それをテストします。シーケンスを切り替えると、elseコードを実行する必要はほとんどありませんが、現在は、ほとんどの場合、テストコードとelseコードを実行する必要があります。最後に、が必要です。else ifではなく、イベントモデルの1つがサポートされていない場合、もう1つは - テストする必要がないためです。

function addEvent(object, evName, fnName, cap) { 
    if (object.addEventListener){ 
     object.addEventListener(evName, fnName, cap); 
    } else { 
     object.attachEvent("on" + evName, fnName); 
    }   
} 
0

選択したインデックスの値プロパティを使用して、選択した項目を取得することができます。クッキーに保存する

var cake = document.getElementById("favoriteCake"); 
var selectedCake = cake.options[cake.selectedIndex].value; 

一つの方法は次のとおりです。

document.cookie = "selected_cake="+selectedCake; 
関連する問題