質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

1932閲覧

HTML jQuery フォームで全てのセレクトボックスが選択されているか確認し、全て選択されている時のみ送信したい。

daichanman

総合スコア6

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/11/11 08:26

編集2021/11/11 08:54

HTML jQuery 全てのセレクトボックスが選択されているか確認して同意ボタンを有効化したい

HTMLで

複数(何個でも)のセレクトボックス
同意チェックボックスと
送信ボタン

構成のフォームを作っています。

セレクトボックスが全て選択されていたら
同意のチェックボックスにチェックができ
送信ボタンも有効化されるような実装をしたいと思っているのですが。
セレクトの判定がうまくできません。
どなたかご教授していただけないでしょうか?

よろしくお願いいたします。

該当のソースコード

HTML

1<form name="form" id="form" method="post"> 2 3 <div> 4 <label>設問1</label> 5 <select id="form1" class="select" name="option_01"> 6 <option value="" disabled selected>選択してください</option> 7 <option value="1">YES</option> 8 <option value="2">NO</option> 9 </select> 10 </div> 11 12 <div> 13 <label>設問2</label> 14 <select id="form2" class="select" name="option_02"> 15 <option value="" disabled selected>選択してください</option> 16 <option value="1">YES</option> 17 <option value="2">NO</option> 18 </select> 19 </div> 20 21 <div> 22 <input type="checkbox" id="agree" value="1" class="disabled"> 23 <label for="agree">同意する</label> 24 </div> 25 <a class="disabled" id="join_button">送信</a> 26 </form> 27

Jq

1 2 $('#agree').change(function(){ 3 4 if ($('#agree').prop('checked')) { 5 $('#join_button').removeClass('disabled'); 6 } else { 7 $('#join_button').addClass('disabled'); 8 } 9 }); 10 11 12 $('#agree').change(function(){ 13 $('select').each(function(){ 14 if($(this).val() === ''){ 15 $('#agree').prop('disabled', true); 16 }else{ 17 $('#agree').prop('disabled', false); 18 } 19 }); 20 }); 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以下のような値

  • すべてのセレクトボックスにおいて、選択してください以外の option が選ばれているならば true
  • どれかひとつでも、選択してくださいのままのものがあれば false

となるような変数 ok を得るには

javascript

1const ok = $('select').get().every(({ value }) => value);

とすればよいです。

???? 参考: 上記のok を使った、サンプル (※確認のためセレクトボックスを4個にしています)

投稿2021/11/11 13:57

編集2021/11/11 13:58
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いろいろやり方はあると思いますが、自分ならこうするというものを書いておきます。

html

1<div> 2 <label>設問1</label> 3 <select id="form1" class="select" name="option_01"> 4 <option value="" disabled selected>選択してください</option> 5 <option value="1">YES</option> 6 <option value="2">NO</option> 7 </select> 8</div> 9 10<div> 11 <label>設問2</label> 12 <select id="form2" class="select" name="option_02"> 13 <option value="" disabled selected>選択してください</option> 14 <option value="1">YES</option> 15 <option value="2">NO</option> 16 </select> 17</div> 18 19<div> 20 <input type="checkbox" id="agree" value="1" disabled> 21 <label for="agree">同意する</label> 22</div> 23 24<button id="join_button" disabled>送信</button> 25 26<script> 27const form1 = document.querySelector("#form1"); 28const form2 = document.querySelector("#form2"); 29const agree = document.querySelector("#agree"); 30const joinButton = document.querySelector("#join_button"); 31 32window.addEventListener("App.Form.changed", (event) => { 33 let isFormValid = true; 34 35 isFormValid = isFormValid && form1.selectedOptions.item(0).value !== ""; 36 isFormValid = isFormValid && form2.selectedOptions.item(0).value !== ""; 37 38 agree.disabled = !isFormValid; 39 40 joinButton.disabled = !isFormValid; 41}); 42 43form1.addEventListener("change", (event) => { 44 window.dispatchEvent(new CustomEvent("App.Form.changed")); 45}); 46 47form2.addEventListener("change", (event) => { 48 window.dispatchEvent(new CustomEvent("App.Form.changed")); 49}); 50</script>

追記

jQueryに置き換えたものが以下になります。

js

1<div> 2 <label>設問1</label> 3 <select id="form1" class="select" name="option_01"> 4 <option value="" disabled selected>選択してください</option> 5 <option value="1">YES</option> 6 <option value="2">NO</option> 7 </select> 8</div> 9 10<div> 11 <label>設問2</label> 12 <select id="form2" class="select" name="option_02"> 13 <option value="" disabled selected>選択してください</option> 14 <option value="1">YES</option> 15 <option value="2">NO</option> 16 </select> 17</div> 18 19<div> 20 <input type="checkbox" id="agree" value="1" disabled> 21 <label for="agree">同意する</label> 22</div> 23 24<button id="join_button" disabled>送信</button> 25 26<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> 27 28<script> 29const $window = $(window); 30const $form1 = $("#form1"); 31const $form2 = $("#form2"); 32const $agree = $("#agree"); 33const $joinButton = $("#join_button"); 34 35$window.on("App.Form.changed", (event) => { 36 let isFormValid = true; 37 38 isFormValid = isFormValid && $form1.find("option:selected").val() !== ""; 39 isFormValid = isFormValid && $form2.find("option:selected").val() !== ""; 40 41 $agree.attr("disabled", !isFormValid); 42 43 $joinButton.attr("disabled", !isFormValid); 44}); 45 46$form1.on("change", (event) => { 47 $window.trigger("App.Form.changed"); 48}); 49 50$form2.on("change", (event) => { 51 $window.trigger("App.Form.changed"); 52}); 53</script>

投稿2021/11/11 08:41

編集2021/11/12 00:49
KAOsaka

総合スコア531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daichanman

2021/11/11 10:25

回答ありがとうございます。 希望の動きになっていました。 すみませんJavaScriptあまり読めずJQでのソースなど 教えていただくことは可能でしょうか? また冗長ではなくループなど使う方法もありましたら参考までに教えていただけたら助かります。
KAOsaka

2021/11/12 00:51

回答追記しました。jQueryでは同一セレクタの要素をまとめて操作できてしまうので、行数を減らしたいのであればkilesaさんの回答も参考にすると良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問