- ベストアンサー
SELECTの選択状態を、複数のVALUE要素の一部を使ってCookie保存したい
- 複数のVALUE要素を使ってSELECTの選択状態をCookieに保存する方法を知りたいです。
- 保存した後に、SELECTのVALUE値を変更すると保存データとの照合ができなくなるため、一部の値を連番にして照合する方法を考えました。
- HTMLのサンプルコードを提供し、選択状態を保存して再現する方法についてのアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 なかみをちゃんと見たわけじゃないけど、loadCookieでは正しく値をとれているのに、最後にセットする時に、aもbも同じにvalueと比較しているから照合できないだけでは? bの方は分解して一部だけ保存しているので、そのまま照合しても同じ値が存在するはずがない。 とりあえず、質問の例で言えば、bの方は setvalue2(document.getElementById('myform').b, GET[1]); とでもしておいて function setvalue2(o,v){ for(i=0;i<o.length;i++) if(o[i].value.split(',')[3]==v) o[i].selected=true; } としてやれば、値のセットはできます。 表示している文字(text)のほうを識別子に利用するとか(これも変わるのかなぁ?)、単純な識別子を用いてデータセットを特定する考え方にするのが良いかと思う。(データセットの中身は書き換えるということなので) このような識別子がないとすると、どのデータセットがどのデータセットと同じなのか(内容が変わるので、比較しても違う)そもそもわからないことになってしまう。 また、数も変わるということなので、該当するデータセットが存在しないというケースも想定して処理を考えておく必要があると思われます。 (ご質問の状態と同じことが起こります = データが見つからない)
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
よく理解してないけど・・・ クッキーから読み込んだ値と、各optionの値を「,」でsplitした先頭(?)の値とを比較して、一致したらそのオプションということで良いのでは? そもそも、こちら側で附番できる管理用番号という感じであるならば、オプションのインデックス番号を識別子として使用しておけば、照合作業も不要になると思うけど・・・ それとも、オプションの内容の順番が入れ替わるとか、オプションの数も変化してしまうということなのだろうか? 照合しても、存在しない場合もあるということ? いまいち状況が把握できてないので、外していたら失礼。
お礼
> それとも、オプションの内容の順番が入れ替わるとか、オプションの数も変化してしまうということなのだろうか? value要素の数と勘違いしてました、orz そうなんです、セレクトの選択項目を時々追加してるので、OPTIONの数や順番は変化します。 だからOPTIONの一番上から[0]~[30]という風に自動で連番を振られると、これまた後で順番を入れ替えできなくなってしまって困るんです・・。 value要素の数は一定 ↓ ↓ ↓ ↓ <OPTION value="1,11,111,b01">1</OPTION> <OPTION value="2,22,222,b02">2</OPTION> ~~~~ ・・・・ <OPTION value="9,99,999,b09">9</OPTION> ←OPTION(選択項目)が増えたり順番(上下の配置)が変わったりはする
補足
ご回答ありがとうございます!。 > クッキーから読み込んだ値と、各optionの値を「,」でsplitした先頭(?)の値とを比較して、一致したらそのオプションということで良いのでは? こんなのかな? パズルの様にsplit(',')[]の置き場所を色々試してみたんですけど上手くいかず・・。 http://kissho.xii.jp/1/src/1jyou57019.html function set_cookie(){ o=document.getElementById('myform'); var v =[]; v[0] = o.a.value; v[1] = o.b.value.split(',')[0]; //「,」で分離して[0]のみ保存 saveCookie( o.selectsave.value, v.join('/'),30); document.getElementById('sample').value=v.join('/'); } function get_cookie(){ var o=document.getElementById('myform'); var GET=loadCookie(o.selectsave.value).split('/'); document.getElementById('sample').value=loadCookie(o.selectsave.value);//sapmle setvalue(document.getElementById('myform').a, GET[0]); setvalue(document.getElementById('myform').b.value.split(',')[0], GET[1]);//←ここをどうにかすれば良いと思ってるんですけど・・ > そもそも、こちら側で附番できる管理用番号という感じであるならば、オプションのインデックス番号を識別子として使用しておけば、照合作業も不要になると思うけど・・・ ネット上のサンプル(この保存プログラムも過去ログを参考に・・)などを見ながら改造している様な状態でして、、(^^;; やり方がわかりません。 orz > 照合しても、存在しない場合もあるということ? いえ、数値が少し修正されるだけで、 「100」が「95」になったり「110」になったりという程度です。 しかし、ちょっとでも数値を修正すると照合できないので、数値とは別に照合用の連番を持たせられないかと。
お礼
> としてやれば、値のセットはできます。 すごい!!。 やっぱり駄目なのかなぁ、と諦めかけてたんですが、、(^^;; 教えて頂いたコードの記述で希望通りの動作をするようになりました!。 > 表示している文字(text)のほうを識別子に利用するとか(これも変わるのかなぁ?)、 変更の可能性があるのと、 保存数が巨大計算表×数パターンで300項目ぐらいになるので、(汗 textだとvalueよりサイズが大きくなってしまい 一部の懸案箇所のみに導入でもCookieの容量制限4KBに引っ掛かりそうなんです。 逆に、valueの一部だけを保存する方式にすれば 今でも心許ないCookieサイズの大幅削減にも繋がって一石二鳥です(^^)。 > 単純な識別子を用いてデータセットを特定する考え方にするのが良いかと思う。(データセットの中身は書き換えるということなので) ということで、valueの一つを連番にして持たせようと思ったんですが・・不味いのかな?。(汗 今回教えて頂いた箇所はずっと修正したかったんですけど あちこち探しても手本として使えそうなサンプルや解説が見つからず困ってました。 ネットのどこにもない方法を教えて頂いて大変助かりました。ありがとうございました!。m(_)m