連動プルダウンのリンクについて

このQ&Aのポイント
  • 初心者向けに連動プルダウンの作成方法を参考にしましたが、リンク作成部分でエラーが発生しました。
  • 選択した項目によって別ウィンドウにリンクを表示することが目標ですが、うまくいかず困っています。
  • プルダウンメニューの選択肢に対応するリンクを作成できる方法や問題解決策が分からず、助けを求めています。
回答を見る
  • ベストアンサー

連動プルダウンのリンクについて

はじめまして。 javascriptをはじめて間もない初心者になりますがよろしくお願いします。 質問内容に不備がありましたら申し訳ございません。 まず行いたいことですが、ここを参考に連動プルダウンを作成しました。 http://d.hatena.ne.jp/Mars/20071109 これを元に選んだ項目によって別ウィンドウにてリンクを表示したいのですが、うまくいかずご質問させていただきました。 リンク項目は決まっておりません。例えば3項目目にあったり2項目目にあったりと。 urlをvalueに入れて参照するからと思い以下を作成してみました。 <script type="text/javascript"><!-- function jump(thisForm){ location.href = thisForm.options[thisForm.options.selectedIndex].value; } //--></script> <form name="thisForm"> <select id="SEL1"> <option value="">---</option> <option value="XXX">XXX</option> <option value="YYY">YYY</option> <option value="ZZZ">ZZZ</option> </select> <select id="SEL2"> <option value="">---</option> <optgroup label="XXX"> <option value="x1">x1</option> <option value="x2">x2</option> </optgroup> <optgroup label="YYY"> <option value="y1">y1</option> <option value="y2">y2</option> </optgroup> <optgroup label="ZZZ"> <option value="z1">z1</option> <option value="z2">z2</option> </optgroup> </select> <select id="SEL3"> <option value="">---</option> <optgroup label="x1"> <option value="x1a">x1a</option> <option value="x1b">x1b</option> </optgroup> <optgroup label="x2"> <option value="x2a">x2a</option> <option value="x2b">x2b</option> </optgroup> <optgroup label="y1"> <option value="y1a">y1a</option> <option value="xxx.xxx.html">y1b</option> </optgroup> <optgroup label="y2"> <option value="y2a">y2a</option> <option value="y2b">y2b</option> </optgroup> <optgroup label="z1"> <option value="z1a">z1a</option> <option value="z1b">z1b</option> </optgroup> <optgroup label="z2"> <option value="***.***.html">z2a</option> <option value="z2b">z2b</option> </optgroup> <input type=button value="GO" onClick="Jump(this.form)"> </form> </select> <script type="text/javascript"> ConnectedSelect(['SEL1','SEL2','SEL3']); </script> この場合にボタンを押してリンクをさせたかったのですが、エラーが表示されエラーを参照して調べたのですが、どこをどう直せばいいのか、全く間違っているのかも分からず質問させていただきました。ネットでも調べてみたのですが、どの方法が一番合うかも分かりませんでした。 拙い文章で申し訳ないですが、ご教授いただけますでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

.htmlを識別するのでよければ、2番目のほうがよさそうですね。 >この構文を使用する場合はelseも必要になるということでしょうか? 処理内容によりますが、ご質問文から想像する範囲では、 『もしもリンクだったら(=文字列の最後が.htmlだったら)、別ウィンドウで開く。(そうでなかったら、何もしない)』 ということになるのでしょうから、(そうでなかったら、何もしない)は書くべき処理がないので、省略できます。  if (str.match(/\.html?$/)) window.open(str,'_blank'); if構文やwindow.openについては、javascriptの解説サイトに必ず載っていますので、正しい使用法や解説は必ずそちらで確認してください。 以下、参考までに  http://www.tohoho-web.com/js/index.htm  http://javascriptist.net/docs/js_ref.html  http://www.openspc2.org/JavaScript/reference4/index.html

waldexc
質問者

お礼

またまた迅速な対応ありがとうございました。 いただいた構文と参考サイトを元に作成してみたいと思います。 非常に勉強になる詳細な解説ありがとうございます。 また何かありましたよろしくお願いいたします。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

No1です。 実際の使用環境での、起こり得るバリエーションを想定できるのは質問者様だけですので、どのようにして区別できるかが本人がわからないとなんともしようがありませんよ。 例えば、「最後に.htmlがあるもの」で区別するならば、ごく一般的な  http://www.aaa/bbb.html は当然OKですが、 No1のお礼にも出ている  http://okwave.jp/qa4972283.html?ans_count_asc=1​ とか  http://www.yahoo.co.jp/ みたいなものはリンクとみなされなくなりますし、さらには  http://www.aaa/bbb.cgi とか http://aaa/bbb.php とか  http://www.aaa/bbb.jpeg みたいなものにも反応しなくなります。 また、拡張子は .html .htm など複数あったりしますし、対象はどの程度までなのでしょうか? 正攻法でURLかどうかをチェックしようとすると、↓こんなんになるらしい(笑  http://www.din.or.jp/~ohzaki/perl.htm#URI ここまでやる必要はないにしてもどの程度なのかは、実際の利用環境次第 場合によっては、リンクでないものをチェックしたほうが簡単な場合もあるので(valueの文字列に共通の限定ができる場合)、そっちの方が簡単な場合も考えられます。 例として、『文字列中に'.html'が含まれているか』をチェックするなら (チェックの対象文字列をstrとして)  if (str.indexOf('.html')>-1) が真なら含まれていると判断できます (いきなり.htmlというのもないだろうから、 >0 でもよいと思いますが) 『文字列の最後が'.html'か'.htm'で終わる』でチェックする場合だと  if (str.match(/\.html?$/)) のような具合になるでしょう。 2番目のように正規表現を利用すると便利な場合が多いと思うけど、どういうチェックをするかについては、やはり質問者様が決めないと誰にもわかりません。 以下、正規表現の参考までに  http://www.site-cooler.com/kwl/javascript/15.htm

waldexc
質問者

お礼

fujillin様 度々の迅速な回答ありがとうございます。 私の説明不足にて申し訳ございませんでした。しかし参考になるお話非常にありがたいです。とても参考になります。 >どのようにして区別できるかが本人がわからないとなんともしようがありませんよ。 確かに仰る通りでございます。説明不足で申し訳ありません。区別したいものは「http://www.aaa/bbb.html」と同じで拡張子はhtmlのみを区別してリンクさせたいのです。それ以外のvalueは文字列なのですが、様々なので特定は不可能と思っております。 ですのでhtmlの拡張子のみを特定してリンクさせる方法をご教授願いますでしょうか? >if(str.indexOf('.html')>-1) この構文を使用する場合はelseも必要になるということでしょうか?全くの初心者で申し訳ないですがよろしくお願いします。。。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ざっと気づいた点を… ご質問のFormは Form  |-select(SEL1)  |-select(SEL2)  |-select(SEL3) というような構造になっているので、optionのvalueを取得するのにはthisForm.options ではなく、 thisForm.Elements['SEL1'].options とか thisForm.SEL1.options などのようにしないと対象とする要素が不明なので値を取得できません。 また、リンクがどのセレクトにあるのかも決まっていないのであれば、フォーム内の全セレクタ(例では3個)を対象にチェックする必要がありそうです。 (2つ以上のリンクが選択されていた場合、どうするのかなぁ--両方開く?片方のみ?) さらに、いきなり location.href = ~ としていますが、valueの内容にリンクとそうでないものがあるのなら、まず、それをチェックして、リンクならばジャンプというようにしておかないと意図通りにはならないのでは? …で、リンクとそうでない値はどのようにして区別できるのでしょうか? (これに回答できるのは、質問者様だけです) 質問文程度の範囲のものに限定できるのなら、拡張子「.html」が最後にあったらリンクと判定するとかできそうだけど、実際のところが不明なのでわかりません。 >別ウィンドウにてリンクを表示したいのですが location.href = ~ だと自ウィンドウが対象となりますので、別ウィンドウにしたければ、 window.open(url, name …) を使うことになるでしょう。

waldexc
質問者

お礼

早々の回答ありがとうございます。 拙い質問にこれだけ回答いただき感謝しております! >valueの内容にリンクとそうでないものがあるのなら、まず、それをチェックして、リンクならばジャンプというようにしておかないと意図通りにはならないのでは? 仰る通りでございます。まさしくそこが問題となっているところでございます。 >…で、リンクとそうでない値はどのようにして区別できるのでしょうか? fujillin様が仰っている通りに拡張子「.html」でしか判別できないです。 http://okwave.jp/qa4972283.html?ans_count_asc=1 この質問のようにifを用いてリンクする場合としない場合を区別するのかと思ったのですが、if文が分からずリファレンスを扱っているホームページも参考にしてみましたが分からずご質問させていただきました。 if使用するもしくはしないでも区別できる方法をご教授いただけますでしょうか? よろしくお願い致します。

関連するQ&A

  • プルダウン連動とリンク

    選択項目により連動するプルダウンを利用し、各々のページにリンクさせようと思っているのですが、上手くいきません。 一つ目のプルダウンで項目を選択⇒二つ目のプルダウンに項目が表示される⇒選択するとリンクする。 プルダウンはこちらのソースを利用しています。 http://d.hatena.ne.jp/Mars/20071109 連動リンクはこちらを参考にしました。 http://air.rulez.jp/shop/java/jt_pulldown.htm 現在のソースは下記のようになっています。 プルダウンの連動とリンク、それぞれ単体での動作確認は出来たのですが、組み合わせると上手くいきません。 最初のプルダウンで「YYY」を選択し、連動して次のプルダウンに表示される「yahooかgoogle」を選択したらURL先にリンクしたいのですが。 現在はプルダウンは連動はされるものの、2つめのプルダウンで項目を選択しても何も起こらない状態です。 ----------------------------------------------------------------- <script type="text/javascript" src="ConnectedSelect.js"></script> <form> <select id="SEL1"> <option value="XXX">XXX</option> <option value="YYY">YYY</option> </select> <select id="SEL2" onChange="top.location.href=value"> <optgroup label="XXX"> <option value="x1">x1</option> <option value="x2">x2</option> </optgroup> <optgroup label="YYY"> <option value="http://www.yahoo.co.jp/">yahoo</option> <option value="https://www.google.co.jp/">google</option> </optgroup> </select> </form> <script type="text/javascript"> ConnectedSelect(['SEL1','SEL2','SEL3']); </script> --------------------------------------------------------------- これはどのように修正すればリンクされるようになるでしょうか? また別の方法があればそちらでも構いません。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

  • プルダウンのリンクについて

    javascriptで以前にもリンクについて質問させていただいたものです。 http://okwave.jp/qa4980697.html この質問で丁寧に回答いただいたのですが、私の知識(理解力)不足の為、自分の思ったような動作をしなかったため再度質問させていただきました。 質問としては、「.html」拡張子のみをリンクとして別ウィンドウに表示したいということです。それ以外の拡張子はございません。 自分で作成したソースを記載致しますので修正点等をご教授ください。 何分初心者なので全く検討違いな構文になっているかと思いますが、ご容赦ください。 <script type="text/javascript"><!-- function Jump(){ if (str.match(/\.html?$/)) window.open(str,'_blank'); } //--></script> <body> <title>test</title> <form name="form"> <select name="SEL1"> <option value="">-----------</option> <option value="aa">aa</option> <option value="bb">bb</option> </select> <select name="SEL2"> <option value="">-----------</option> <optgroup label="aa"> <option value="aa1">aa1</option> <option value="aa2">aa2</option> </optgroup> <optgroup label="bb"> <option value="bb1">bb1</option> <option value="bb2">bb2</option> </optgroup> </select> <select name="SEL3"> <option value="">-----------</option> <optgroup label="aa1"> <option value="aa3">aa3</option> <option value="xxx.xxx.html">リンク</option> </optgroup> </select>            ~省略~ <select name="SEL10"> <option value="">-----------</option> <optgroup label="xx"> <option value="xx1">xx1</option> <option value="yyy.yyy.html">リンク2</option> </optgroup> </select> <input type=button value="go" onClick="Jump()"> </form> としたのですが、エラーで ライン:8(<html><body>があるため) 文字:14 エラー:'str'は宣言されていません。 と表示されてしまいます。 前回fujillin様に丁寧に解説していただき参考サイトまでご教授いただいたのですが、拡張子を特定して判別するという作業が理解できず再度質問させていただきました。どのようにfunction部分を構成すればリンクとして表示できるようになりますでしょうか?ご面倒なことで申し訳ないですが、よろしくご教授お願い致します。

  • 3つの連動したプルダウンメニューのフォームについて

    http://d.hatena.ne.jp/Mars/20071109 こちらのページを参考にしてフォームの中身を以下ようにしたいのです。 このような感じです <select id=”SEL1”> <optgroup label=”choise”> <option value=”fruit”>フルーツ</option> <option value=”vegetable”>野菜</option> </select> <select id=”SEL2”> <optgroup label=”fruits”> <option value=”x1”>みかん</option> <option value=”x1”>りんご</option> <option value=”x1”>メロン</option> </optgroup> <optgroup label=”vegetable”> <option value=”x1”>キャベツ</option> <option value=”x1”>きゅうり</option> <option value=”x1”>トマト</option> </optgroup> </select> <select id=”SEL3”> <optgroup label=”x1”> <option>1個</option> <option>2個</option> <option>3個</option> <option>4個</option> <option>5個</option> <option>6個</option> </optgroup> </select> このようにプルダウンメニューを3階層にして、3段階目に繋げる2段階目のoption valueは全て同じにしたいのですが、 そうすると、フォームで送信した結果が select id=SEL2 のところで全てが ”x1”になってしまい各商品の名前を出すことができません。 何か方法があれば教えてください。 使っているジャバスクリプトは以下です function ConnectedSelect(selIdList){ for(var i=0;selIdList[i];i++) { var CS = new Object(); var obj = document.getElementById(selIdList[i]); if(i){ CS.node=document.createElement('select'); var GR = obj.getElementsByTagName('optgroup'); while(GR[0]) { CS.node.appendChild(GR[0].cloneNode(true)); obj.removeChild(GR[0]); } obj.disabled = true; } if(selIdList[i+1]) { CS.nextSelect = document.getElementById(selIdList[i+1]); obj.onchange = function(){ConnectedSelectEnabledSelect(this)}; } else { CS.nextSelect = false; } obj.ConnectedSelect = CS; } } function ConnectedSelectEnabledSelect(oSel){ var oVal = oSel.options[oSel.selectedIndex].value; if(oVal) { while(oSel.ConnectedSelect.nextSelect.options[1])oSel.ConnectedSelect.nextSelect.remove(1); var eF = false; for(var OG=oSel.ConnectedSelect.nextSelect.ConnectedSelect.node.firstChild;OG;OG=OG.nextSibling) { if(OG.label == oVal) { eF = true; for(var OP=OG.firstChild;OP;OP=OP.nextSibling) oSel.ConnectedSelect.nextSelect.appendChild(OP.cloneNode(true)); break; } } oSel.ConnectedSelect.nextSelect.disabled = !eF; } else { oSel.ConnectedSelect.nextSelect.selectedIndex = 0; oSel.ConnectedSelect.nextSelect.disabled = true; } if(oSel.ConnectedSelect.nextSelect.onchange)oSel.ConnectedSelect.nextSelect.onchange(); }

  • 日付プルダウン選択フォーム

    専門の方が退社されて、サブ業務で多少HPの情報更新や修正をしていた私にお鉢が回ってきてしまい困っており、お教えいただけるとありがたいです。 現在のフォームですと、2ヶ月先までフォームで選択来るようになっており、今なら今年の12月・来年の1月・来年の2月が選択可能になっているのですが これを4ヶ月先まで選択出来るようにしたい場合どのようにしたらいいのでしょうか? 月セレクト>11月より後の処理>optgroup label forあたりの記述がイマイチ理解出来てないです。 //西暦取得 $seireki = date("Y"); //来年を取得 $rainen = date("Y",strtotime("+1 year")); //今月を取得-0をつけない⇒付ける時は"m" $tsuki = date("n"); //翌月を取得 $yokutsuki = date('n', strtotime(date('Y-m-1').' +1 month')); //再来月を取得 $saraigetsu = date('n', strtotime(date('Y-m-1').' +2 month')); //今日を取得-0を付けない⇒着ける時は"d" $hi = date("j"); //指定した月の日数を取得 $tsukihi = date("t"); //翌月の日数を取得 $yokutsukihi = date("t",mktime(0, 0, 0, date("m")+1, 1, date("Y"))); //再来月の日数を取得 $saraigetsuhi = date("t",mktime(0, 0, 0, date("m")+2, 1, date("Y"))); //print"".$seireki.$tsuki.$hi."今月の日数".$tsukihi."翌月".$yokutsuki."翌月の日数".$yokutsukihi; //11月になったら来年をセレクト可能にする if($tsuki >= "11"){ $tougetsu = "<select id=\"SEL1\" name=\"year\">\r\n<option value=\"\">---</option>\r\n<option value=\"$seireki\">{$seireki}年</option>\r\n<option value=\"$rainen\">{$rainen}年</option></select>\r\n"; }else{ $tougetsu = "<select id=\"SEL1\" name=\"year\">\r\n<option value=\"\">---</option>\r\n<option value=\"$seireki\">{$seireki}年</option>\r\n</select>\r\n"; } //月のセレクト $tsuki1 = date("n"); if($tsuki1 <= "10" ){ //10月より前の月の処理 $tsuki_select = "<select id=\"SEL2\" name=\"month\">\r\n<option value=\"\">---</option>\r\n<optgroup label=\"".$seireki."\">"; for($k = $tsuki1; $k <= $tsuki1 + 2; $k++){ $tsuki_select .= "<option value=\"".$k."\">".$k."月</option>\r\n"; } $tsuki_select .="</optgroup>\r\n</select>"; }else{ //11月より後の処理 $tsuki2 = $yokutsuki; $tsuki3 = $saraigetsu; $tsuki_select = "<select id=\"SEL2\" name=\"month\">\r\n<option value=\"\">---</option>\r\n<optgroup label=\"".$seireki."\">"; for($k = $tsuki1; $k < $tsuki1 + $tsuki2; $k++){ $tsuki_select .= "<option value=\"".$k."\">".$k."月</option>\r\n"; } $tsuki_select .="</optgroup> <optgroup label=\"".$rainen."\">"; for($t = 1; $t <= $tsuki3; $t++){ $tsuki_select .= "<option value=\"".$t."\">".$t."月</option>\r\n"; } $tsuki_select .="</optgroup></select>\r\n"; } //日付のセレクト(当月) $day_select ="<select id=\"SEL3\" name=\"day\"> <option value=\"\">---</option> <optgroup label=\"".$tsuki."\">\r\n"; for($i = $hi; $i <= $tsukihi; $i++){ if(isset($hi) && $hi == $i){ $day_select .="<option value=\"".$i."\" selected=\"selected\">".$i."日</option>\r\n"; }else{ $day_select .="<option value=\"".$i."\">".$i."日</option>\r\n"; } } $day_select .="</optgroup> <optgroup label=\"".$yokutsuki."\">\r\n"; for($j = 1; $j <= $yokutsukihi; $j++){//翌月分 $day_select .="<option value=\"".$j."\">".$j."日</option>\r\n"; } $day_select .="</optgroup> <optgroup label=\"".$saraigetsu."\">\r\n"; for($l = 1; $l <= $saraigetsuhi; $l++){//翌々月分 $day_select .="<option value=\"".$l."\">".$l."日</option>\r\n"; } $day_select .="</optgroup></select>\r\n"; ----表示部---- <td>  <?= $tougetsu ?> <?= $tsuki_select ?> <?= $day_select ?> <script type="text/javascript"> ConnectedSelect(['SEL1','SEL2','SEL3']); </script> </td>

  • javascriptで選択肢が分かれるプルダウンでcgiにデータを送るには?

    下記のように、javascriptで選択肢が変化するプルダウンを使用してcgiにデータを送りたいのですが、この方法ですと一番最初の選択肢である「果物・肉」の部分のデータしかcgiに送れません。 例えば「果物・梨・20世紀梨」や「肉・鶏肉・比内地鶏」というように、選択したすべてのデータをcgiに送れるようにするにはどうすればよいのでしょうか? 分かりづらい説明で申し訳ありません。 補足説明致しますので、どうかご教授下さいますようお願い致します。 以下がサンプルソースです。 <html> <head> <script type="text/javascript"> <!-- function ConnectedSelect(selIdList){ for(var i=0;selIdList[i];i++) { var CS = new Object(); var obj = document.getElementById(selIdList[i]); if(i){ CS.node=document.createElement('select'); var GR = obj.getElementsByTagName('optgroup'); while(GR[0]) { CS.node.appendChild(GR[0].cloneNode(true)); obj.removeChild(GR[0]); } obj.disabled = true; } if(selIdList[i+1]) { CS.nextSelect = document.getElementById(selIdList[i+1]); obj.onchange = function(){ConnectedSelectEnabledSelect(this)}; } else { CS.nextSelect = false; } obj.ConnectedSelect = CS; } } function ConnectedSelectEnabledSelect(oSel){ var oVal = oSel.options[oSel.selectedIndex].value; if(oVal) { while(oSel.ConnectedSelect.nextSelect.options[1])oSel.ConnectedSelect.nextSelect.remove(1); var eF = false; for(var OG=oSel.ConnectedSelect.nextSelect.ConnectedSelect.node.firstChild;OG;OG=OG.nextSibling) { if(OG.label == oVal) { eF = true; for(var OP=OG.firstChild;OP;OP=OP.nextSibling) oSel.ConnectedSelect.nextSelect.appendChild(OP.cloneNode(true)); break; } } oSel.ConnectedSelect.nextSelect.disabled = !eF; } else { oSel.ConnectedSelect.nextSelect.selectedIndex = 0; oSel.ConnectedSelect.nextSelect.disabled = true; } if(oSel.ConnectedSelect.nextSelect.onchange)oSel.ConnectedSelect.nextSelect.onchange(); } --> </script> </head> <body> <form method="POST" action="http://www.●●.com/●●.cgi"> <input type="hidden" name="mode" value="regist" /> <select name="item" id="sel1"> <option value="果物">果物</option> <option value="肉">肉</option> </select> <select name="" id="sel2"> <optgroup label="果物"> <option value="梨">梨</option> <option value="りんご">りんご</option> </optgroup> <optgroup label="肉"> <option value="牛肉">牛肉</option> <option value="鶏肉">鶏肉</option> </optgroup> </select> <select name="" id="sel3"> <optgroup label="梨"> <option value="20世紀梨">20世紀梨</option> <option value="ラフランス">ラフランス</option> </optgroup> <optgroup label="りんご"> <option value="ふじ">ふじ</option> <option value="つがる">つがる</option> </optgroup> <optgroup label="牛肉"> <option value="和牛">和牛</option> <option value="アメリカ牛">アメリカ牛</option> </optgroup> <optgroup label="鶏肉"> <option value="名古屋コーチン">名古屋コーチン</option> <option value="比内地鶏">比内地鶏</option> </optgroup> </select> <script type="text/javascript"> ConnectedSelect(['sel1','sel2','sel3']); </script> <input type="submit"></form> </body> </html>

  • 連動プルダウン 確認画面から戻ると初期化される

    いつもお世話になります。 javascript初心者です。 以下のページを参考に、プルダウンが連動して選択肢が変わるフォームを作成しました。 http://d.hatena.ne.jp/Mars/20071109 ==HTML ココカラ============================================= <html> <head> <script src="./js/ConnectedSelect.js" type="text/javascript"></script> </head> <body> <form> <select name="sel1" id="SEL1"> <option value="" selected>--------- 選択してください ---------</option> <option value="1" >果物</option> <option value="2" >野菜</option> </select> <select name="sel12" id="SEL2"> <option value="" selected>--------- 選択してください ---------</option> <optgroup label="1"> <option value="1" >モモ</option> <option value="2" >スイカ</option> <option value="3" >ブドウ</option> </optgroup> <optgroup label="2"> <option value="4" >きゅうり</option> <option value="5" >トマト</option> <option value="6" >レタス</option> </optgroup> </select> <script type="text/javascript"> ConnectedSelect(['SEL1','SEL2']); </script> <input type="submit" value="確認"> </form> </body> </html> ==HTML ココマデ============================================= ==ConnectedSelect.js ココカラ============================== function ConnectedSelect(selIdList){ for(var i=0;selIdList[i];i++) { var CS = new Object(); var obj = document.getElementById(selIdList[i]); if(i){ CS.node=document.createElement('select'); var GR = obj.getElementsByTagName('optgroup'); while(GR[0]) { CS.node.appendChild(GR[0].cloneNode(true)); obj.removeChild(GR[0]); } obj.disabled = true; } if(selIdList[i+1]) { CS.nextSelect = document.getElementById(selIdList[i+1]); obj.onchange = function(){ConnectedSelectEnabledSelect(this)}; } else { CS.nextSelect = false; } obj.ConnectedSelect = CS; } } function ConnectedSelectEnabledSelect(oSel){ var oVal = oSel.options[oSel.selectedIndex].value; if(oVal) { while(oSel.ConnectedSelect.nextSelect.options[1])oSel.ConnectedSelect.nextSelect.remove(1); var eF = false; for(var OG=oSel.ConnectedSelect.nextSelect.ConnectedSelect.node.firstChild;OG;OG=OG.nextSibling) { if(OG.label == oVal) { eF = true; for(var OP=OG.firstChild;OP;OP=OP.nextSibling) oSel.ConnectedSelect.nextSelect.appendChild(OP.cloneNode(true)); break; } } oSel.ConnectedSelect.nextSelect.disabled = !eF; } else { oSel.ConnectedSelect.nextSelect.selectedIndex = 0; oSel.ConnectedSelect.nextSelect.disabled = true; } if(oSel.ConnectedSelect.nextSelect.onchange)oSel.ConnectedSelect.nextSelect.onchange(); } ==ConnectedSelect.js ココカラ============================== ちゃんと連動できて喜んでいたのですが、入力画面から確認画面に移動し、修正するために戻ると、子プルダウンの値が初期状態(選択していない状態)に戻ってしまっていました。 こちらを選択した状態を保持しておく方法はないでしょうか。 教えていただけましたら助かります。 よろしくお願いします。

  • 【HTML5】selectにrequierd

    HTML5でformのグループ化されたselectを必須にしたいと思い、 下記のようにrequiredを記述しました。 <select name="sample[]" required> <option value="">--</option> <optgroup label="カテゴリA"> <option value="1">選択肢1</option> <option value="2">選択肢2</option> </optgroup> <optgroup label="カテゴリB"> <option value="3">選択肢3</option> </optgroup> </select> そうすると、選択肢1を選択していても「必須項目です」と表示され、フォームが送信できません。 valueの値が1だと選択済として扱われないのでしょうか。 optgroupをなくすと選択肢1を選択した状態で送信できました。 valueの値は1で送信したいのですが、可能でしょうか。

  • Stack overflow line at:0のエラーについて

    はじめまして。 先日も質問させていただき、見事に解決できたのでまた質問させていただきます。 タイトルにもあるのですが、連動プルダウンを使用したJavascriptでエラーが出てしまいます。ネットでも色々と調べ呼び出しのメモリが不足している、キャッシュが多いなど載っていましたが、どうもPCそのものの問題ではないようです。 それ以外では構文のエラーということだったのでフリーソフトのエラーチェックを行ったのですが、特に問題はなかったです。 プルダウンは全部で20個あり初めの4個は選択後に次のプルダウンに移行すると必ずStack overflowのエラーがでます。 不躾な質問で申し訳ないですが、何か問題があるのかご教授いただけないでしょうか? よろしくお願いします。 以下は構文になります。 <html> <head> <title>テンプレtest</title> <script type="text/javascript"src="ConnectedSelect.js"></script> <script> function Jump(f){ for(var i=0;i<f.length;i++){ if(f[i].type=="select-one" && f[i].value.match(/\.html?$/)){ window.open(f[i].value,'_blank'); break; } } } </script> </head> <body> <form> 項目1<select name="SEL1"> <option value="">-----------</option> <option value="aa">aa</option> </select> 項目2<select name="SEL2"> <option value="">-----------</option> <optgroup label="aa"> <option value="aa1">aa1</option> <option value="aa2">aa2</option>     <option value="bb1">bb1</option> </optgroup></select>              ・              ・              ・              ・ 項目20<select name="SEL20"> <option value="">-----------</option> <optgroup label="zz"> <option value="zz1">zz1</option> <option value="zz2">zz2</option>     <option value="***.html">***</option> </optgroup></select> <input type="button" value="Go" onClick="Jump(this.form)"> <script type="text/javascript">ConnectedSelect (['SEL1','SEL2','SEL3','SEL4','SEL5','SEL6','SEL7','SEL8','SEL9','SEL10','SEL11','SEL12','SEL13','SEL14','SEL15','SEL16','SEL17','SEL18','SEL19','SEL20']); </script> </form> </center> </body> </html>

  • CSVファイルの""内コンマの処理

    以下のようなCSVファイルがあります。 xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 これを、 xxx,yyy,zzz,XXX,YYY,ZZZ,111,222 の様にperlで ""内のコンマを取りたいのですが、どうしたらよいでしょうか? xxx,yyy,z zz,XXX,YY Y,ZZZ,111,222 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • <SELECT>の<option value="#">で#にリンクされるような形でcsv2tableをつかってcsvテーブルを出したい

    説明がうまくできないのですが 通常、option valueの値を下記のように <select id="pref" name="pref" class="selectable"> <optgroup label="海の魚"> <option value="001.html">真鯛</option> <option value="002.html">ガシラ</option>     </optgroup>     <optgroup label="川の魚"> <option value="003.html">鮎</option> <option value="004.html">鯉</option>     </optgroup> </select> となっている場合、真鯛を選択すると001.htmlにジャンプしますよね。 こういうのの応用で、↓ここのように http://allabout.co.jp/internet/javascript/closeup/CU20080229A/index2.htm csvから表を呼び出して表示するようにしたいのですが、具体的にどのようにすればよいでしょうか? 上記サイトでは <input>タグで呼び出すようにしていますので、物理的に不可能な場合は最終<input>タグでもいいかなと思っているのですが、情報が多いためできればインターフェースをすっきりさせたい面もあって<select>メニューから選択し、それが反映されるようにしたいのですが、どのようにすればよいでしょうか? 当方、htmlとcssの知識は多少ありますが、jsやajaxの知識はあまりありませんので、できるだけ詳しく教えていただけるとありがたいです。 ajaxを使用する場合、ライブラリはJquery1.3を使用していますので かち合わないようにお願いします。 イメージ的には、下記のようなものが作りたいです。 このままだと動かないですけど・・・イメージとして・・・ <select id="pref" name="pref" class="selectable"> <optgroup label="海の魚"> <option value="         $('#fish').csv2table('001.csv',{ select : [0,1,2] });"       >真鯛</option> <option value="         $('#fish').csv2table('001.csv',{ select : [0,3,4] });"      ">ガシラ</option>     </optgroup>     <optgroup label="川の魚"> <optgroup label="海の魚"> <option value="         $('#fish').csv2table('002.csv',{ select : [0,1,2] });"       >鮎</option> <option value="         $('#fish').csv2table('002.csv',{ select : [0,3,4] });"      ">鯉</option>     </optgroup> </select> <div id="fish"></div> イメージとしては、プルダウンで真鯛を選択すると、<div id="fish">●●</div>ここに、001.csvの0列・1列・2列目が吐き出され、またプルダウンから鯉を選択すると、002.csvの0列・3列・4列目が吐き出しなおされるというようなイメージです。

専門家に質問してみよう