
頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。
前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。
IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらいました。
その時はselectタグにidを仕込んでおき、「window.onload」でgetElementByIdを使用するやり方を
教わったのですが、今回はそれでうまくいきません。
ネットで検索していてcookieを使用してデータを保持しておくというやり方も見かけたのですが、
一番効率のよいやり方はどのようなものになるのでしょうか。
どうかよろしくお願いします。
以下ソースとなります。
<html>
<head>
<title>テストテスト</title>
<script language="JavaScript"><!--
menuItem = [ [ ],
["あああ","あああ2","あああ3","あああ4","あああ5"],
["いいい","いいい2"],
["ううう","ううう2","ううう3"],
["えええ","えええ2","えええ3","えええ4"] ];
function clearOption(len){
var i;
for (i=0; i<len; i++){
document.aaa.bbb.options[i] = null;
}
}
function setMenuItem(n){
optlen = document.aaa.bbb.options.length;
while(optlen > 0){
clearOption(optlen);
optlen = document.aaa.bbb.options.length;
}
if (menuItem[n].length > 0){
for (i=0; i<menuItem[n].length; i++){
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]);
for( j=1; j<=4; j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
}
}
window.onload = function(){
setMenuItem(document.getElementById('q1').value);
//alert(document.getElementById('q2').value);
}
// --></script>
</head>
<body>
<form name="aaa" action="./next.html" method="POST">
<select name="Maker" id="q1" onChange="setMenuItem(this.selectedIndex)">
<option value="" selected>--- 選択してください ---</option>
<option value="1">ひとつ</option>
<option value="2">ふたつ</option>
<option value="3">みっつ</option>
<option value="4">よっつ</option>
</select>
<select name="bbb" id="q2">
<option value="" selected>--- 選択してください ---</option>
</select>
<input type="submit" name="ok" vakue="ok">
</form>
</body>
</html>
No.1ベストアンサー
- 回答日時:
ブラウザによって動作が変わってしまいそうな気がしますね。
検証はしてないですが。
どなたかが仰るように、クッキーで値を変えてあげると良いかも知れませんね。
cookieなんですが、この情報はjavascriptの方で取得してあげる必要があります。
javascriptでは、document.cookieでドメイン上のcookieが取得できると思うので、取得した後parserなどの関数を用意して必要な値を得る必要があると思います。
cookieの発行はsubmit後のページで、サーバーサイドから出してあげた方が良いと思います。
ただ、戻るの動作によってはページの表示自体がおかしくなりそうな気もしますね。
上手く動いたら教えてください!
この回答への補足
<html>
<head>
<title>テストテスト</title>
<script language="JavaScript"><!--
menuItem = [ [ "--- 選択してください ---" ],
["--- 選択してください ---","あああ","あああ2","あああ3","あああ4","あああ5"],
["--- 選択してください ---","いいい","いいい2"],
["--- 選択してください ---","ううう","ううう2","ううう3"],
["--- 選択してください ---","えええ","えええ2","えええ3","えええ4"]
["--- 選択してください ---","おおお","おおお2","おおお3","おおお4","おおお5","おおお6"] ];
function setMenuItem(n){
var pullmenu = 4;
len = document.aaa.bbb.options.length;
for (i=len-1; i>=0; i--){
document.aaa.bbb.options[i] = null;
}
for (i=0; i<menuItem[n].length; i++){
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]);
for( j=1; j<=eval(pullmenu); j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
}
//COOKIE保存
function saveData(){
theName = "value1";
theValue = document.aaa.bbb.selectedIndex;
theDay = 7;
setDay = new Date();
setDay.setTime(setDay.getTime()+(theDay*1000*60*60*24));
expDay = setDay.toGMTString();
document.cookie = theName + "="+escape(theValue)+";expires="+expDay;
}
//COOKIEの読み込み
window.onload = function(){
if( document.aaa.Maker.selectedIndex != "" ){
var pullmenu = 4;
k = setMenuItem(document.getElementById('q1').value);
for (i=0; i<k; i++){
document.aaa.bbb.options[i] = new Option(menuItem[k][i],menuItem[k][i]);
for( j=1; j<=eval(pullmenu); j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
theData = "";
theName = "value1=";
theCookie = document.cookie+";";
start = theCookie.indexOf(theName);
if (start != -1){
end = theCookie.indexOf(";",start);
theData = unescape(theCookie.substring(start+theName.length,end));
}
document.aaa.bbb.selectedIndex = theData;
}
}
// --></script>
</head>
<body>
<form name="aaa" action="./next.html" method="POST">
<select name="Maker" id="q1" onChange="setMenuItem(this.selectedIndex)">
<option value="" selected>--- 選択してください ---</option>
<option value="1">ひとつ</option>
<option value="2">ふたつ</option>
<option value="3">みっつ</option>
<option value="4">よっつ</option>
</select>
<select name="bbb" onChange="saveData()">
<option value="" selected>--- 選択してください ---</option>
</select>
<input type="submit" name="ok" vakue="ok">
</form>
</body>
</html>
コメントありがとうございます。
やはりクッキーを使用したほうが良いみたいですね。
そこでネットで調べ上げて試してみたところ、思ったとおりの動作をするようになりました!
今のところ不具合もなく動作しています。
もっとスマートに書けそうな気もしますが・・・;
とりあえずこんな感じですよということで、コードを付けておきます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルを読みこみ、プルダ...
-
プルダウンで選択したページか...
-
ラジオボタンでポップアップメ...
-
[Javascript]テキストボックス...
-
セレクトメニューの選択項目に...
-
Ruby on Rails でプルダウン
-
セレクトボックスの値で分岐処...
-
Selectボックスの幅を自動で広...
-
親ウィンドウのリスト値変更
-
リストボックスの操作について
-
プルダウン2つで別項目に値を...
-
以下のコードがIE8では実行...
-
DBの値を利用して、3つの連動し...
-
新しくフォルダを作成したい
-
テキストだけonCllickを検知したい
-
IEではうまく行くのですが他の...
-
Array.sortメソッドのデフォル...
-
return trueとreturn falseの用...
-
Java scriptのonchangeについて 続
-
onclickで画像と文字を別々の場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Selectボックスの幅を自動で広...
-
プルダウン 項目が多いので先頭...
-
jQuery セレクトボックスで選択...
-
JQuery selectが反映されない
-
CSVファイルを読みこみ、プルダ...
-
【javascript・PHP】プルダウン...
-
Selectの中身をfor文で入れる
-
セレクトを全て選択されていな...
-
html selectの内容を初期値に戻す
-
現在時刻を取得してフォームのs...
-
selectメニューのselectedの位...
-
HTMLコンボボックスへの項目追加
-
セレクトの値を取得できない
-
フォームのメニューリストを外...
-
UWSCのIE操作でプルダウンを選...
-
プルダウンとテキストの連動
-
プルダウン選択の連動
-
セレクトメニューで選択された...
-
javascriptでの2つのプルダウン...
-
getElementsByNameについて
おすすめ情報