• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:教えてください!)

セレクトボックスの値チェックでうまく分岐できない問題

このQ&Aのポイント
  • セレクトボックスの値チェックでうまく分岐できない問題への対処方法を教えてください。
  • セレクトボックスのvalueが0以外でも、$(this).val() == '0'がtrueになる問題があります。
  • 全てのセレクトボックスのvalueを0以外にしても分岐ができない問題が発生しています。どのように対処すればよいでしょうか?

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

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.3

>>No.2 お礼 var selectList = $('#box select'); selectList.change(function() {  var str = ''; // select要素ごとに呼ばれる関数の外側で宣言  selectList.each(function(i) {   if (this.value === '0') {    str = ''; // 空にして中断    return false; // 中断   }   str += this.value; // 0でなければ連結   if (i >= selectList.length - 1) { // 末尾要素まで到達    alert(str); // 選択項目すべてが連結された文字列   }  }); }); 関数式が入れ子になってて分かり辛くなってますかね。 -------------------------------------------------------- var selectList = $('#box select'); selectList.change(changeCallback); function changeCallback() {  selectList.each(eachCallback); } var str = ''; // select要素ごとに呼ばれる関数の外側で宣言 function eachCallback(i) {  if (this.value === '0') {   str = ''; // 空にして中断   return false; // 中断  }  str += this.value; // 0でなければ連結  if (i >= selectList.length - 1) { // 末尾要素まで到達   alert(str); // 選択項目すべてが連結された文字列   str = ''; // 使い終わったら空にする  } } 分かりやすくなったのかは微妙ですが。

dcx147
質問者

お礼

お返事ありがとうございます。 コメントまでつけていただいて理解を深める事ができました! おかげさまで問題解決です。本当にありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • my--
  • ベストアンサー率89% (91/102)
回答No.2

<div id="box"> <select> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> <select> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> </div> var selectList = $('#box select'); selectList.change(function() {  selectList.each(function(i) {   if (this.value === '0') {    //alert('値に0がある');    return false; // 中断   }   if (i >= selectList.length - 1) { // 末尾要素まで到達    //全てのセレクトボックスでvalueが0でなければ何かする    alert('値に0がない');   }  }); }); jQueryオブジェクトにピックアップされた要素すべてに対し changeメソッドに渡した関数が実行されるよう処理してくれますから セレクタを工夫されてみてはどうでしょう。 選択されている項目の方はselect要素のvalue値を直接見てやればいいと思います。

dcx147
質問者

お礼

ありがとうございます。思うような0判定ができました! 確かにこのようにした方が楽に操作できますね。 文字の連結がうまくいかなくなってしまったのですが ここはどのようにすれば回避できますでしょうか? if (i >= selectList.length - 1) { var str = ''; str += this.value;//←イメージ的には131という文字列にしたい alert(str);//←最後のセレクトボックスで選んだ値だけ表示される //$('#view').csv2table('./data/Book' + str + '.csv');//←ファイル名に利用したいです }

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

回答がないみたいなので… id=select1と書いてあるけれど、コードのほうは$("select#item" + i)となっているのはタイポでしょうか? onchangeでチェックをすると、(デフォルトがvalue=0と想定して)入力中に何度もチェックがかかってしまうので、formのonsubmitなどを利用するほうがよくありませんか? ライブラリを使用してはいませんが、こんな要領でいかがでしょうか。 (id指定にするとかalertを変更するなど適宜修正してください) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head><title>sample</title> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function check(form) { var i, count = 4, mes = "", frm = form.elements; for (i=1; i<count; i++) if (frm["select" + i].value == "0") { mes += (mes?"\n":"") + "select" + i + "の値が0です"; } if (mes) { alert(mes); return false; } //3箇所とも0でない場合の処理 alert("ok"); } //--> </script> </head> <body> <form name="form1" action="" method="" onsubmit="return check(this);"> <label>select1: <select name="select1"> <option value="0" selected>0</option> <option value="1">1</option> </select> </label> <br> <label>others : <select name="other"> <option value="0" selected>0</option> <option value="1">1</option> </select> </label> <br> <label>select2: <select name="select2"> <option value="0" selected>0</option> <option value="1">1</option> </select> </label> <br> <label>select3: <select name="select3"> <option value="0" selected>0</option> <option value="1">1</option> </select> </label> <br> <input type="submit" value="実行"> </form> </body> </html>

dcx147
質問者

お礼

お返事ありがとうございます。 タイポミスがありました。ややこしくなってしまい申し訳ございません。 >onchangeでチェックをすると、(デフォルトがvalue=0と想定して)入力中に何度もチェックがかかってしまうので、formのonsubmitなどを利用するほうがよくありませんか? 確かにその通りなのですがsubmitせず実現したいと思っております。 フォームの値から表示するcsvを選択し最終的にはjqueryを使用しcsvデータの表示を行いたいと思っております。 ※valueが131であれば131.csvを読込むような感じです <form action="" method="get"> <div class="selectBox"> <label for="item1"> 項目1 </label> <select name="item1" id="item1" onchange="return check(this);"> <option value="0">-------------</option> <option value="1">項目1</option> <option value="2">項目2</option> <option value="3">項目3</option> </select> </form> 上記のようにして試してみましたがエラーになってしまうのですがどのようにすれば いいでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A