JavaScriptでフォーム内容をCookieに入れて戻す方法

このQ&Aのポイント
  • フォームの内容をJavaScriptで上から順番にCookieに保存し、再びフォームに戻す方法を教えてください。
  • JavaScriptを使用して、フォームに入力された内容を上から順番にCookieに保存し、次回ページを読み込んだ際に再びフォームに戻せる方法を知りたいです。
  • JavaScriptを利用して、フォームに入力された内容を上から順番にCookieに保存しておき、後でこの情報を再度フォームに戻すための方法を教えてください。
回答を見る
  • ベストアンサー

フォーム内容を上から順番にJavaScriptでCookieに入れて、また戻す方法

フォームにかかれている内容を上から順番にCookieに入れて 次にそのページに来たときに読みこれるようにしたいのですが、わからなくなってしまいました。 まず下記でJavaScriptに値を渡します。 onClick="saveCookie(this.form.elements[0].value,this.form.elements[1].value,this.form.elements[2].value) 次にJavaScriptで処理します。 ----------------------------------------------- xDay = new Date; xDay.setYear(xDay.getYear() + 1); xDay = xDay.toGMTString(); cook = new Array(); function saveCookie(value01,value02,value03){ cook[0] = value01; cook[1] = value02; cook[2] = value03; cooks = escape(cook[0]); i = 1; while (cook[i]){ cooks += "%00" + escape(cook[i]); i++; } document.cookie = "fat_cookie=" + cooks + "; expires=" + xDay; } function loadCookie(){ cooklng = document.cookie.length; cook = document.cookie.split("; "); cooks = ""; i = 0; while (cook[i]){ if (cook[i].substr(0,11) == "fat_cookie="){ cooks = cook[i].substr(11,cook[i].length); break; } i++; } cook = cooks.split("%00"); ??? = unescape(cook[0]); ←ここがわかりません。 } window.onload=loadCookie; ----------------------------------------------- Cookieに保存して、またバラバラにするところまでは出来たのですが 最後にフォームに戻すところでわからなくなってしまいました。 色々試したのですがうまくいきません。 どなたかわかる方いらっしゃいましたら、 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

<form name="Form">などとフォームに名前をつけておき、 document.Form.elements[0].value = unescape(cook[0]); とやれば戻せるのでは? ラジオボタンやチェックボックス、リストなどの場合でしたら、ひとつひとつの値をcookieと比較して、一致する場合にcheckedやselectedにするって感じですかね。 私は要素名を使ってこんな感じで書いています。 テキストボックス、ラジオボタン、セレクトボックスのそれぞれの処理例です。 // Cookie出力 function getCookie(){ 中略(クッキーを配列cookに取得) document.Form.V1.value = unescape(cook[0]); h = document.Form.V2.length; for (i=0; i < j; i++) { if (document.Form.V2[i].value == cook[1]) { document.Form.V2[i].checked = true; } } j = document.Form.V2.length; for (k=0; k < j; k++) { if (document.Form.V2[k].value == cook[2]) { document.Form.V2[j].selected = true; } } } フォーム <form name="Form" onsubmit="saveCookie(V1.value,V2.value,V3.value)"> <input type="text" name="V1"> <input type="radio" name="V2" value="1"> <input type="radio" name="V2" value="2"> <select name="V3"> <option value="1">1 <option value="2">2 <option value="3">3 <input type="submit" value="送信"> </select> </form> ご参考になりましたら幸いです。

Java-Java
質問者

お礼

ありがとうございます。出来ました! いいとこまでは行ってたんですが、フォーム名なしで下記のようにしてたのがダメな原因でした。 名前付けたら出来ました。 document.this.form.elements[0].value = unescape(cook[0]); 教えてもらったままだとCookieが無い場合「undefined」と表示されていたので下記のようにしました。 if (cook[0]) document.form.elements[0].value = unescape(cook[0]); ラジオボタンやチェックボックスの使い方もありがとうございます。参考にさせてもらいます。 また質問することがあるかと思いますが、その時はよろしくお願いします。 では失礼します。

Java-Java
質問者

補足

お礼を書いてから気づいたのですが、フォームの名前を付けずに下記でも出来ました。 document.forms[0].elements[0].value = unescape(cook[0]); でも名前付けた方がわかりやすいですね。

関連するQ&A

  • 外部からgetされた内容をクッキーに書き込みたい

    お世話になります。 外部URLからgetされる内容をCookieに書き込んで利用したいのですが、うまくいきません。 外部から送られてくる内容は以下のものです。 <form method="get" action="https://www.xxxxxxxx/kiyaku.html" target="_blank"> <input type="hidden" name="id_agency" value="00000000"> <input type="image" name="submit" src="images/b.gif"> </form> 読み書き用のjavascriptとして、以下のものを作ってみました。 cookie.js ckary = new Array(); //setcookie ここから function setck(){ ckary[0] = document.forms[0].id_agency.value; exp=new Date(); exp.setTime(exp.getTime()+1000*60*60*24*60); ckstr = escape(ckary[0]); i = 1; while (ckary[i]){ ckstr += "%00" + escape(ckary[i]); i++; } document.cookie = "XX_Agency=" + ckstr + "; expires=" + exp.toGMTString(); } //setcookie ここまで //getcookie ここから function getck(){ cklng = document.cookie.length; ckary = document.cookie.split("; "); ckstr = ""; i = 0; while (ckary[i]){ if (ckary[i].substr(0,10) == "XX_Agency="){ ckstr = ckary[i].substr(10,ckary[i].length); break; } i++; } ckary = ckstr.split("%00"); if (ckary[0]) document.forms[0].id_agency.value = unescape(ckary[0]); } //getcookie ここまで javascriptはあまりわかりませんので、本を引きながら作っています。どなたか、指摘お願いします。

  • JavaScriptを使った計算フォーム

    JavaScriptを使った計算フォームで質問です。 人数をテキストボックスに入力し、そのあと項目を選ぶと計算がされるようにしたいのですが ラジオボタンが持っているvalueを取り出せません。 下記の「←------???」と書いてあるところを何とかすれば完成だと思うのですが、 どなたか教えていただけないでしょうか? <script language="JavaScript" type="text/JavaScript"> function sjLeft(source,length) { if (source.length < length) { return (""); } return source.substr(0, length); } function sjReplace(source,start,length,target) { sjlen = source.length; if ((start > sjlen) || (start < 0)) { return String(""); } return String(sjLeft(source,start ) + target + source.substr(start+length, sjlen)); } function sjInsert( source, start, target) { return sjReplace(source,start,0,target); } function fcheck(obj) { s1_2value = ??? * new Number(document.form1.n1.value); ←------??? document.form1.s1_2.value = String(s1_2value); document.form1.total.value = s1_2value; return true; } </script> <form name="form1" method="POST"> <table width="400" border="1"> <tr> <td>人数</td> <td></td> <td><input type=text name=n1 size=8 onChange="fcheck(this);">人</td> <td></td> </tr> <tr> td><input name="n2" type="radio" value="13000" onChange="fcheck(this);">食事A</td> <td>\13,000</td> <td>×人数</td> <td><input name=s1_2 type=text size=8 readonly>円</td> </tr> <tr> <td colspan="2">&nbsp;</td> <td>総計</td> <td><input type=text readonly name=total size=10>円</td> </tr> </table> </form>

  • JavascriptとCookieについて

    HTML【index.php】でフォームを作り、クリック時にCookieに保存 →別ページ【input.php】で保存したCookieで判断し内容を変更するページを作ろうと思っています。 http://memo.ark-under.net/memo/404 こちらのページを参考に以下のように作ってみたのですが動作しません。 JavascriptとPHPを使えたらどんな方法でも良いので、ご教授お願い致します。 最近勉強を始めた初心者ですので、なるべく簡単に教えていただけると幸いです。 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 【index.php】 <script type="text/javascript"> // クッキー保存 setCookie(クッキー名, クッキーの値, クッキーの有効日数); // function setCookie(c_name,value,expiredays){ // pathの指定 var path = location.pathname; // pathをフォルダ毎に指定する場合のIE対策 var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } // 有効期限の日付 var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); // クッキーに保存する文字列を生成 var s=""; s += c_name +"="+ escape(value);// 値はエンコードしておく s += "; path="+ path; if(expiredays){ s += "; expires=" +exdate+"; "; }else{ s += "; "; } // クッキーに保存 document.cookie=s; } <form action="input.php" method="post"> ボタン1:<input type="submit" name="input" value="入力" onsubmit="return setCookie('hanteisql','1',7)"> ボタン2:<input type="submit" name="input2" value="入力" onsubmit="return setCookie('hanteisql','1',7)"> </form> ----------------------------------------------------------------------- ----------------------------------------------------------------------- 【input.php】 <?php echo "クッキーは".$_COOKIE["hanteisql"]."です。" ?> -----------------------------------------------------------------------

  • 型変換を行った後で計算をする方法

    DBには、テキスト型で保存している数字があります。 それをJSP側でINT型に変換して、 計算を行いたいのですが、何か良い方法はありませんか? 下記のままだと常に0が表示されてしまいます。 どうか良いアドバイスをお願いします。 function changeYosan() {  var lstYosan = document.form.elements("_uriageYosan");  var lstJisseki = document.form.elements("_uriageJisseki");  var lstNobi = document.form.elements("_nobiritsu"); for(i = 0 ; lstYosan.length > i ; i ++ ){   lstNobi[i].value = lstYosan[i].value.replace(",","") /     lstJisseki[i].value * 100; if(isNaN(lstNobi[i].value)){   lstNobi[i].value = 0; } } }

  • javascriptでフォーム部品の参照番号を直接取得する方法はありますか?

    現在、下記のようにして参照番号を取得しています(o=フォーム部品)。 フォームの部品数が多くなると、時間が多くかかってしまいます。 直接参照番号を取得する方法があったらおしえてください。 for (i=0;i<o.form.length;i++) { if (document.forms[i].elements[i] == o){alert(i);break;} }

  • エラー理由が解らない

    JavaScript初心者ですが 以下の関数でエラーがでるのですが、理由がわかりません。 配列変数は別ソースにてテストしていますが問題なく定義されています。 function total(){ for(var i = 0; i <= ItemQty.length; i++){ window.alert((document.form1.elements[ItemQty[i]].value)*(document.form1.elements[Itemlen[i]].value)*SptVal[i]))  } }

  • javascriptでフォームの値の計算

    javascript1か月目の初心者です。 7つのテキストフィールドに数値を代入させて合計と平均(最後には標準偏差)を計算しようと思ってます。 以下のように考えましたが、うまくいきません。 strが文字列として?扱われてしまっているようです。 strをevalで囲んでみてもダメです。 詳しい方教えてください。 <!--スクリプト1--> <SCRIPT LANGUAGE="JavaScript"> <!-- function f_check() { if(document.F1.num1.value!=""&&document.F1.num2.value!=""&&document.F1.num3.value!=""&&document.F1.num4.value!=""&&document.F1.num5.value!="" &&document.F1.num6.value!=""&&document.F1.num7.value!=""){ str=0 for(var i = 0;i<document.F1.length;i++){ str+=document.F1[i].value; } alert('合計は'+str+"です"); avrg = (str)/document.F1.length; alert('平均は'+avrg+'です'); //ここから標準偏差の計算(略)。 } // --> </SCRIPT> <form method="post" name="F1" onSubmit="return f_check()"> 数値を入れてください<input type="text" name="num1" size="5"><br> 数値を入れてください<input type="text" name="num2" size="5"><br> 数値を入れてください<input type="text" name="num3" size="5"><br> 数値を入れてください<input type="text" name="num4" size="5"><br> 数値を入れてください<input type="text" name="num5" size="5"><br> 数値を入れてください<input type="text" name="num6" size="5"><br> 数値を入れてください<input type="text" name="num7" size="5"><br> <INPUT TYPE=SUBMIT VALUE="平均をとる"></FORM>

  • javascriptでフォーム要素の状態を制御

    いつもお世話様です。 phpでフォームを構成しています。 フォーム内のradioボタンの状態で、以降のラジオボタン、プルダウン、テキスト入力を 制御したいです。 <制御内容(やりたいこと)> situmon.phpで、 q1のラジオボタンが1の場合は、q2は回答しなくていい。 (2の場合だけ回答させる。) q3のチェックボックスが1でない場合は、プルダウンとテキストは入力しなくていい。 (1の場合だけ回答させる。) <現状のソース> ちなみに、該当するjavascript部分は、いろいろなサイトをみて、 いろいろ書き換えて試しましたが、どうもうまくいかず、 断念した段階そのままの状態です。 よって、ご回答はこれをベースにしなくても大丈夫です。 よろしくお願いします。 ---situmon.php--- <script type="text/javascript"> <!-- function Check() { document.form.elements["q2"][1].disabled = (!document.form.elements["q1"][2].checked); document.form.elements["q2"][2].disabled = (!document.form.elements["q1"][2].checked); document.form.elements["q2t"].disabled = (!document.form.elements["q1"][2].checked); } // --> </script> <body> <form name="form"> <!-- q1 --> <input type="radio" name="q1" id="q1" value="1" onclick="check();"/>はい <input type="radio" name="q1" id="q1" value="2" onclick="check();"/>いいえ <!-- q2 --> <input type="radio" name="q2" id="q2" value="1" />なぜ1 <input type="radio" name="q2" id="q2" value="1" />なぜ2 (その他: <input type="text" name="q2t" id="q2t" value="<php echo h(@$q2t); ?>" />) <!-- q3 --> <input type="checkbox" name="q3c" value="1" />楽しかった <select name="q3s"> <option value="" />▼選んで <option value="1" />めちゃめちゃ <option value="2" />めっちゃ <option value="3" />めちゃ </select> その他なにかあったら書いて <textarea name="q3t" id="q3t"><?php echo h(@$q3t); ?></textarea> </body>

  • Javascript onsubmit記述方法

    サイト制作をしているのですが、行き詰った箇所を教えてください。 form内でEnterキーを押したときに送信ページに飛んでしまわずに、次項目へ行くように(Tabの役割)するJavascriptと、確認用メールアドレスの項目を作るためのJavascriptを併用したいのですが、 onsubmitに"return CheckForm(this);"と"javascript:pageTracker._linkByPost(this)"を並列させる必要があるようなのですが、書き方を教えてください。 もし、そもそもの記述が間違っていたらご指摘ください。 ---- Javascript部分 <script type="text/javascript"> /*********************************************** * Disable "Enter" key in Form script- * By Nurul Fadilah(nurul@REMOVETHISvolmedia.com) ***********************************************/ function handleEnter (field, event) { var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if (keyCode == 13) { var i; for (i = 0; i < field.form.elements.length; i++) if (field == field.form.elements[i]) break; i = (i + 1) % field.form.elements.length; field.form.elements[i].focus(); return false; } else return true; } </script> <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (theform.mailaddress.value == "") { FieldControl(theform.To, "「メールアドレス」を入力してください。"); }else if (theform.mailaddresscheck.value != theform.email1.value ) { FieldControl(theform.To, "「メールアドレス(確認用)」を入力してください。"); }else if (theform.mailaddresscheck.value != theform.email1.value ) { FieldControl(theform.To, "入力されたものが一致するように入力してください。"); }else { FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> ------- HTML部分(現状"Enter" key in Formのみ実装) <form action="" method="post" onSubmit="javascript:pageTracker._linkByPost(this)"> <table class="contact"> <tr> <th>メールアドレス <span class="red">※</span></th> <td><input type="text" name="mailaddress" id="textfield" class="type01" onkeypress="return handleEnter(this, event)" /></td> </tr> <tr> <th>メールアドレス確認用 <span class="red">※</span></th> <td><input type="text" name="mailaddresscheck" id="textfield" class="type01" onkeypress="return handleEnter(this, event)" /></td> </tr>

  • ページ内の全チェックボックスのチェック

    ページ内の全チェックボックスのチェックするブックマックレットを作成したいのですが、うまく動作しません。どのようにすればよいのでしょうか? よろしくお願いします。 javascript:void(for(i=0; i<document.form[0].elements[0].checkboxs.length; i++){document.form[0].elements[0].checkboxs[i].checked=true;})