アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも参考にさせて頂いています。
javascriptでセレクトメニューを作っているのですが
うまく出来ないのでどなたか教えて下さい。
宜しくおねがいします。

3連動するセレクトメニューで
3つ目のセレクトメニューを選ぶと
選ばれた項目に対応するURLに飛ぶように作っています。

ここからが質問なのですが、
ページに飛んだ時にセレクトメニューで選択した内容が消えてしまいます・・・
飛んだ先のページでも、選択した内容を表示させるには
どのようにすればいいのでしょうか?

ご存知の方がいましたら教えて下さい。


---html部分----

<html>
<head>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<form id="f0">
<select id="s0">
<option value="">----------------</option>
</select>
<select id="s1">
<option value="">----------------</option>
</select>
<select id="s2">
<option value="">----------------</option>
</select>
</form>
</body>
</html>

---外部javascriptファイル----
var data=
{

吉野家:
{
"牛丼(並)":{0:"380円"},
"牛丼(大盛)":{1:"480円"},
"牛丼(特盛)":{2:"630円"}
}

,松屋:
{
"牛丼(並)":{3:"320円"},
"牛丼(大盛り)":{4:"420円"},
"牛丼(特盛)":{5:"520円"}
}

,すき家:
{
"牛丼(並)":{6:"280円"},
"牛丼(大盛)":{7:"380円"},
"牛丼(特盛)":{8:"480円"}
};

window.onload=function(){

s0=document.getElementById("s0");
s1=document.getElementById("s1");
s2=document.getElementById("s2");
setSelect(data,s0);

s0.onchange=function(){
clearSelect(s2);
if(this.value==""){
clearSelect(s1);
}else{
setSelect(data[this.value],s1);
}
}

s1.onchange=function(){
if(this.value==""){
clearSelect(s2);
}else{
setSelect(data[s0.value][this.value],s2);
}
}

s2.onchange=function(){
location.href="/////////";
}
}

function setSelect(obj,sel){

while(lc=sel.lastChild){
sel.removeChild(lc);
};

var op=document.createElement("option");
op.setAttribute("value","");
op.appendChild(document.createTextNode("----------------"));
sel.appendChild(op);

for(var i in obj){
var txt=(typeof obj[i]=="object")?i:obj[i];
var op=document.createElement("option");
op.setAttribute("value",i);
op.appendChild(document.createTextNode(txt));
sel.appendChild(op);
}
}

function clearSelect(sel){

while(lc=sel.lastChild){
sel.removeChild(lc);
};

var op=document.createElement("option");
op.appendChild(document.createTextNode("----------------"));
sel.appendChild(op);
};

A 回答 (1件)

静的なページは独立した存在であり、ページの移動によってメモリが消去されるので、その間のデータのやり取りをすることは基本的にはできません。



私ならCGIを使うか、面倒ならURLに渡してしまいます。
前者の場合、location.hrefを変更するのではなく、セレクトボックスを包含するフォームをサブミットして、別途CGIを用意して値を受け取って下さい。

CGIが使えない、若しくはそこまで大層なものでもない、というのであればURLに直接渡してしまうのも良いと思います。
URLは、末尾に?をつけるとそれ以降はデータとして扱うことになっています。
それを利用し、送信先のファイルがb.htmlならば、
b.html?セレクトボックス1の値&セレクトボックス2の値&セレクトボックス3の値

というURLを指定しておいて、受け取り側のファイルでonLoadイベント時に、location.hrefを参照して分解すれば3つの値が得られることになります。
分解のアルゴリズムは、
・データ←URLを?で分割、後者を取得
・データの配列←データを&で分割
でOKです。

どうでしょう、出来そうでしょうか?
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。
すぐには出来そうにないですが、1つづつやってみます。
大変参考になりました。

お礼日時:2010/04/25 22:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!