セレクトメニュー(URLs)にURLをつぎつぎに放り込んで、つぎにこのデータをクッキーに保存したいと想い、次のように書いてみました。この一文かどうかはわかりませんが、コンマがありません、というエラーが出ます。

data_for_cookie=document.form1.URLs.options.value;
ホントに初歩的な知識が欠けていてこんなJavaScriptでさえわかりません。どうか御教示をお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

補足されたソース見ました。


エラーになっているのは、「Set-Cookie:~」の行が原因でしょう。 これはPerlを使ったCGIでcookieを保存する時の書式です。 JavaScriptのケースでは、前回の回答に書いたように、「document.cookie=保存する内容」という形式で処理を記述する必要があります。

あと、Cookieを読み出す部分や書き込む部分で、このままではうまくないかなと思える点もあります。 前回の質問で提示したソースと同じようですので、それを元にしてお望みの動作を一応実装したソースを作ってみました。 こちらを試してみてください。

<html>
<head>
<title></title>
<script type="text/javascript"><!--
getc=document.cookie+";";
x1=getc.indexOf("urls");
if (x1!=-1) {
tem1=getc.substring(x1-1);
x2=tem1.indexOf("=");
x3=tem1.indexOf(";");
urls_data0=tem1.substring(x2+1,x3);
urls_data=unescape(urls_data0);
CkOpt=urls_data.split("<>");
}
/* 以上、cookieの読み出しとデータの取得 */

function readOpt(){
if (x1!=-1){
for (i=1; i<CkOpt.length; i++){
document.form1.URLs.options[i]= new Option();
document.form1.URLs.options[i].text=CkOpt[i-1];
}
}
}
/* ↑ページロード時にcookieがあった場合、そのデータを組み込む関数 */

function putOpt(){
n=document.form1.URLs.length;
document.form1.URLs.options[n]= new Option();
document.form1.URLs.options[n].text=document.form1.url_in.value;
document.form1.url_in.value="http://";
document.form1.url_in.focus();
}

function f1move(){
n=document.form1.URLs.selectedIndex;
if (n!=0){
parent.frame1.location.href=document.form1.URLs.options[n].text;
}
}

function optDel(){
n=document.form1.URLs.selectedIndex;
if (n!=0){
document.form1.URLs.options[n]=null;
document.form1.URLs.options[0].selected=true;
}
}
/* ↑特定のoptionを消去する関数 */

function cook(){
urls_data="";
if (document.form1.URLs.options[1]!=null){
for (i=1; i<document.form1.URLs.length; i++){
urls_data+=document.form1.URLs.options[i].text+"<>";
}
exptm="Thu, 1-Jan-2030 00:00:00 GMT";
}
else {
urls_data="none";
exptm="Sat, 25-Oct-2003 00:00:00 GMT";
}
putc="urls="+escape(urls_data)+"; expires="+exptm;
document.cookie=putc;
}
/* ↑Cookieを書き込む関数 */

window.onload=readOpt;
window.onunload=cook;
/* ページロード時、ページアンロード時に関数を実行させる指定 */
// --></script>
<style type="text/css"><!--
--></style>
</head>
<body>

<form name="form1" onSubmit="putOpt(); return false;">
<input type="text" name="url_in" size="40" value="http://">
<input type="submit" value="追加">
<br>
<select name="URLs">
<option selected>選択してください</option>
</select>
<input type="button" value="移動" onClick="f1move()">
<input type="button" value="削除" onClick="optDel()">
</form>

</body>
</html>

前回の質問のソースを元に、cookieを使ったものに改造しました。 cookieを利用した場合、打ち間違いなどで利用できなかったり不要になったりしたoptionを消すことができなくなる可能性があるので、それを回避するために選択されているoption項目を消去する機能を追加してあります。 そのため、ページの移動もボタンで決定するように変えました。 加えて、はじめからある「選択してください」のoption項目が選択されている場合には、「移動」も「消去」も動作しないようにしてあります。
また、cookieの保存はページが移動(アンロード)したタイミングで関数を処理させて実行するようにしています。 ついでに、追加したoptionの項目が無かったり消されたりしてデータが追加されていない状態の場合は、cookieを破棄するようにもしてあります。
その他、詳細については、行ごとに行われている内容を検証して把握してみてください。

上記ソースは一応、WindowsMe上のIE6、Netscape 7.1、Opera 7.11で動作確認を取りました。
私もJavaScriptでcookieにアクセスするソースをしばらく書いていなかったので、あまりスマートではない部分もあるかもしれません。 私も勉強になりました。

長々と失礼しました。 参考になれば幸いです。

この回答への補足

lead1976さま、この文章は「お礼」のあと、書いて差し上げるものです。お詫びいたします。ちゃんと表示されるようになっていました。
 どうも失礼しました。そして、もいいちど、丁寧に完全なスクリプトをプレゼントしていただき、ありがとうございました。勉強になりました。

補足日時:2003/10/26 14:05
    • good
    • 0
この回答へのお礼

lead1976さま、\(^^)/ 素晴らしいですね。びっくりです。なんとお礼を申したらよいか分かりません。
ご覧の通り、表の中に入れて、もう一つのフォームと棲み分けさせています:
http://tovalis.or.tv/dic/tangokensaku.htm

前回も、その完成度に感服いたしましたが、今回さらに仕様が細かくて使いやすいですね。
試しに、URLを入れて表示を試してみましたら、どういう訳か、今回は表示の実行がされていません。。。
前回のソースをもう一度見て調べているところです。ぱっと分かるほどに早くなりたいです。。。

お礼日時:2003/10/26 12:03

現状では、なにがどうエラーになっているのかが良くわからないので、ちょっと具体的なところまでは踏み込めませんが…



とりあえず、cookieにJavaScriptからデータを送り込む場合は、

document.cookie=cookieに保存するデータ;

という書式を取ります。 なお、cookieに保存するデータの形式は、必ず「key名=データ」という形で、キーとデータとの対応関係を明記する必要があります(そうしないと、どこまでがどういったデータなのかが保存できませんし、利用できません)。

cookieからデータを読み出す場合は、

cookie_data=document.cookie;

のように、変数の中にdocument.cookieを読み込んでやればよいです。 なお、cookieのデータは、通常そのままの形では利用できないと思います。 何かしらの加工をしてやって、取得したい値を取り出す処理を入れる必要があるでしょう。
こちらの詳細については、参考URLで解説されていますので、そちらに一度目を通してみると良いと思います。

ご質問文に書かれている一行は、cookieに書き込むためのデータを取りまとめる変数にフォーム内のセレクトメニューのオプションの値を渡そうとしている文のようですが、書式としてoptionsの連番を加えていないので、正常にデータを参照できないこともあるかもしれません。 この場合は、

data_for_cookie="";
for (i=0; i<document.form1.URLs.options.length; i++){
data_for_cookie+=document.form1.URLs.options[i].value+","; // 区切りをつけるために末尾にカンマを追加しています。
}

こういった書式を取るのが良いのではないでしょうか。
ただ、おそらく、エラーメッセージと例示されている部分はあまり関連がないのではないかと思います。

具体的な問題のあるところを特定するには、スクリプトの内容を補足していただく必要がありそうです。 よろしければ、ソースを補足してみて下さい。

参考URL:http://tohoho.wakusei.ne.jp/wwwcook.htm,http://t …

この回答への補足

以下はほとんどの部分をgooの教えて!で教えていただいたものです。ちゃんと動きました。その後、クッキー書き込み、読み込みをするために私が書き加えてからエラーが発生しました。すでに書き込みのところからエラーになっているようです。
<script type="text/javascript"><!--
function putOpt(){
n=document.form1.URLs.length;
document.form1.URLs.options[n]= new Option();
document.form1.URLs.options[n].text=document.form1.url_in.value;
data_for_cookie=document.form1.URLs.options.value;
alert(data_for_cookie);
data_for_cookie=escape(data_for_cookie);
Set-Cookie: NAME=data_for_cookie; Fri, 31-Dec-2030 23:59:59;

document.form1.url_in.value="http://";
document.form1.url_in.focus();
}
// --></script>
<script type="text/javascript"><!--
function f1move(){
parent.frame1.location.href=document.form1.URLs[document.form1.URLs.selectedIndex].text;
}
// --></script>

<script type="text/javascript"><!--
function getCookie(){
storedURLs =document.cookie;
storedURLs = unescape(storedURLs);
document.form1.URLs.options.value=storedURLs;
}
// --></script>

補足日時:2003/10/26 00:24
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qホワイトデイのおすすめクッキーは?

ヴァレンタインデイのお返しに
クッキーでもと考えてますが、クッキーといっても
種種雑多あるなかで、
 「おいしくて」「銘柄の通っているもの」
を教えて下さい。予算は1000円以上の物で。
それとホワイトデイというのは いつでしたっけ?

Aベストアンサー

ホワイトデーは3月14日です。バレンタインの一ヶ月後です。

オススメの焼き菓子ですが個人的に

クイーンアリス

http://www.pq-alice.com/shop/index.php?category_code=2

資生堂パーラー

http://www.shiseido.co.jp/parlour_shop/cont/cookies/index.htm

喜八

http://www.e-kihachi.jp/user/4153895/t14

などのお菓子が美味しくて好きです。銘柄も通っていると思います。

ご参考まで。

QJavaScript Form OPTION value

JavaScript初心者です。

FormとJavaScriptでしたいことがあるのですが、
知識がなくて困っています。わかる方いましたら
ご教授くださいm(_ _)m

(ショッピングカートの)フォームのオプション選択の
ドロップダウンメニューで、オプションを選択すると
それに反応して、その横に配置した画像を変える~
という事がしたいです。

以下のURLにサンプルを見つけて、これと同じことがしたい!
と思ったのですが…

■ドロップダウンメニューで画像が変わる(JavaScript)
http://www.mdn.co.jp/webcre/Tips/Vol12/js_imagechange02.html

このサンプルではフォームの OPTION value
に0などナンバリングをしておいて、Javascriptで

if(fname==0){document.imgsmp.src=img0.src;}

など数字を指定して読み込むようになっていますが、
自分の環境の場合、フォームのオプション選択ごとに
価格を変えるため、OPTION valueに、

OPTION value="グリーン,3000"

というようにオプション名と追加価格を記入しています。
こういった場合、どの用にしたらいいのでしょうか?

自分のフォームのソースの一部を以下に書きます。

--------------------Form-----------------------------

<INPUT type="hidden" class="select_erea" name="option_price_name" value="オプション名">
<SELECT name="option_price" size="15" >
<OPTION value="レッド,1000">レッド</OPTION>
<OPTION value="オレンジ,2000">オレンジ</OPTION>
<OPTION value="グリーン,3000">グリーン</OPTION>
</SELECT>

-----------------------------------------------------

質問も初めてなので、至らない点が多々あるかと思いますが、
よろしくお願いします。

JavaScript初心者です。

FormとJavaScriptでしたいことがあるのですが、
知識がなくて困っています。わかる方いましたら
ご教授くださいm(_ _)m

(ショッピングカートの)フォームのオプション選択の
ドロップダウンメニューで、オプションを選択すると
それに反応して、その横に配置した画像を変える~
という事がしたいです。

以下のURLにサンプルを見つけて、これと同じことがしたい!
と思ったのですが…

■ドロップダウンメニューで画像が変わる(JavaScript)
http://www.mdn.co.jp/webcre...続きを読む

Aベストアンサー

とりあえず、そのサンプルのまま とするなら

fname=parts.options[parts.selectedIndex].value;



fname=parts.selectedIndex;

と変えるだけで使えます。
valueに関係なくOptionリストの上から順に、
0,1,2,3,4・・・の番号です。

そのサンプルもう少し整えた方が良いと思いますけど。

Q携帯で、Cookie(クッキー)って、設定できますか?できるとしたら、設定方法も教えて下さい!!

携帯で、Cookie(クッキー)って、設定できますか?Cookieがないと、2ちゃんねるとかに書き込むことができないみたいなんです。できるとしたら、設定方法も教えて下さい!!

Aベストアンサー

>携帯で、Cookie(クッキー)って、設定できますか?
→手動で設定とかは出来ないと思いますけど…^^;←Cookie

docomoの場合
iモードブラウザ2.0対応機はCookie対応してますが、1.0の場合、Cookie非対応
なので、iモードブラウザ1.0の機種では、どうあがいてもCookieは使用出来ません。
 参考:http://www.nttdocomo.co.jp/service/imode/make/content/browser/browser2/new_function/index.html#p06
対応かどうかは、「対応機種一覧」を参照して下さい。
簡単な見分け方として、
 ・?-99Bの大半はiモードブラウザ2.0(Lだけ1.0)
 ・それ以外はiモードブラウザ1.0(昨年冬モデルの一部は2.0)

auはWシリーズはcookie対応機と思います。
 参考:http://www.au.kddi.com/ezfactory/tec/spec/cookie.html

Softbankは3Gの大半は対応と思います。

フルブラウザやPCサイトブラウザであればON・OFF設定が有る様なので、
其れはお持ちの機種の取扱説明書を参照下さい。

でも、通常、携帯から2に書き込みする時は専用アプリを使用するのが普通
と思いますけどね。
(そのほかの掲示板は判りませんけど)

>携帯で、Cookie(クッキー)って、設定できますか?
→手動で設定とかは出来ないと思いますけど…^^;←Cookie

docomoの場合
iモードブラウザ2.0対応機はCookie対応してますが、1.0の場合、Cookie非対応
なので、iモードブラウザ1.0の機種では、どうあがいてもCookieは使用出来ません。
 参考:http://www.nttdocomo.co.jp/service/imode/make/content/browser/browser2/new_function/index.html#p06
対応かどうかは、「対応機種一覧」を参照して下さい。
簡単な見分け方として、
 ・?-99Bの大半はiモー...続きを読む

Qselect option value が IE だけで動かない

select の option 項目を追加する javascript を組んでいるのですが
IE だけ項目追加ができません。Windows の Firefox2、Safari は期待
通りに項目が追加できました。

option.value を指定しないと IE でも追加できます。IE 専用に特別な
別プログラムが必要なのでしょうか。ご存知の方よろしくお願いします。

var selectBox = document.getElementById("select1");
var option = document.createElement('option');
option.setAttribute('value','my_value');
option.appendChild(document.createTextNode('my_text'));
selectBox.appendChild(option);

3行目をコメントアウトすれば IE でも select にデータが追加され
ますが、肝心の value がないのでプログラム的にダメなんです。

select の option 項目を追加する javascript を組んでいるのですが
IE だけ項目追加ができません。Windows の Firefox2、Safari は期待
通りに項目が追加できました。

option.value を指定しないと IE でも追加できます。IE 専用に特別な
別プログラムが必要なのでしょうか。ご存知の方よろしくお願いします。

var selectBox = document.getElementById("select1");
var option = document.createElement('option');
option.setAttribute('value','my_value');
option.appendChild(document.createTe...続きを読む

Aベストアンサー

う~ん・・・Win版IE6では普通に動いてますがどのIEについて言っている
のでしょ?

<script>
window.onload=function(){
var selectBox = document.getElementById("select1");
var option = document.createElement('option');
option.setAttribute('value','my_value');
option.appendChild(document.createTextNode('my_text'));
selectBox.appendChild(option);
}
</script>
<select id="select1" onchange="alert(this.value)">
<option value="">選択する</option>
</select>

QCookie(クッキー)について

ポイントサイトに「Cookie(クッキー)が無効であれば正常にサービスが利用できませんので、ご注意ください。 」などと書かれています。

サイトの通りに自分のクッキーを確認しましたが
「自動Cookie処理を上書きする」にチェックされていないにも関わらず、サイトにログインするとポイントがきちんと表示されます。

これはクッキーが正常と判断してもいいのでしょうか?
宜しくお願い致します。

Aベストアンサー

通常のCookieの設定は、プライバシータブの設定が「中高」になっていれば正常と判断してもよろしいのでは。
そのサイトのURLCookieを見て、@マーク以降でサイト名が表示されていれば、Cookieでのやり取りがされている、と解釈して良いと思います。
プライバシータブにある「詳細設定」自動Cookie処理を上書きする、は個人のプライバシーに関する設定です。処理にある「ファーストパーティ」は、アクセスしているホームページ先、「サードパーティ」はバナー広告などの事で、アクセスした人の履歴を記録している機能と思って下さい。
例えば、銀行とネットで振り込み処理の作業を行う場合、この設定を有効にしないと、情報が漏れる可能性が出てきます。

Q