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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

4843閲覧

複数のselectのうちどれか1つは必須項目にしたい

web

総合スコア24

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/12/28 01:12

下記コード、div.classlistの中に複数のセレクトメニュー3つとテキストボックスがあります。
この中で、3つのセレクトメニューのうち、未選択または複数選択している場合は入力エラーのアラートを出すようにしたいと考えています。要は、3つのうちどれか1つだけは必須にしたいです。
テキストボックスはすでに必須項目としています。
Javascript(またはjQuery)にてそのコードを実現するにはどのようにすればよいかご教授いただけないでしょうか。
よろしくお願いいたします。

HTML

1<div class="classlist"> 2 <ul class="clearfix"> 3 <li>セレクトメニュー1:</li> 4 <li> 5 <select id="productoptions_1" name="productoptions[1]" style=""> 6 <option label="選択" value="1" selected="selected">選択</option> 7 <option label="○" value="2">○</option> 8 <option label="▲" value="3">▲</option> 9 <option label="□" value="4">□</option> 10 </select> 11 </li> 12 </ul> 13 <ul class="clearfix"> 14 <li>セレクトメニュー2:</li> 15 <li> 16 <select id="productoptions_2" name="productoptions[2]" style=""> 17 <option label="選択" value="11" selected="selected">選択</option> 18 <option label="○○" value="12">○○</option> 19 <option label="▲▲" value="13">▲▲</option> 20 <option label="□□" value="14">□□</option> 21 </select> 22 </li> 23 </ul> 24 <ul class="clearfix"> 25 <li>セレクトメニュー3:</li> 26 <li> 27 <select id="productoptions_3" name="productoptions[3]" style=""> 28 <option label="選択" value="21" selected="selected">選択</option> 29 <option label="○○○" value="22">○○○</option> 30 <option label="▲▲▲" value="23">▲▲▲</option> 31 <option label="□□□" value="24">□□□</option> 32 </select> 33 </li> 34 </ul> 35 <ul class="clearfix"> 36 <li>テキスト入力1:</li> 37 <li> 38 <input id="productoptions_4" class="box300" name="productoptions[4]" value="" style="" type="text"> 39 </li> 40 </ul> 41 <ul class="clearfix"> 42 <li>テキスト入力2:</li> 43 <li> 44 <input id="productoptions_5" class="box300" name="productoptions[5]" value="" style="" type="text"> 45 </li> 46 </ul> 47</div>

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

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

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

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

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

guest

回答4

0

ベストアンサー

jQueryを使った場合、
例えば ID="productoptions_1"のセレクトメニューの選択状態を取得するのであれば、
$('#productoptions_1').val();
で、選択されたoptionのvalue値が取得できます。
また、
$('#productoptions_1 option:selected').text();
で、選択されたoptionのテキスト(labelの値)が取得できます。

それぞれのセレクトメニューで取得したvalue値が「選択」と同じものをカウントする、またはテキストが「選択」である個数をカウントすれば判定できると思います。

選択されているテキストで判定するのであれば、こんな感じでしょうか。

javascript

1var ar = []; 2ar.push($('#productoptions_1 option:selected').text()); 3ar.push($('#productoptions_2 option:selected').text()); 4ar.push($('#productoptions_3 option:selected').text()); 5var cnt = 0; 6for(var i = 0; i < ar.length; i++) { 7 if (ar[i] == "選択") { 8 cnt++; 9 } 10} 11if (cnt != 1) { 12 alert("選択できるのは1個だけ"); 13}

投稿2016/12/28 10:25

編集2016/12/28 11:58
sleepsheep

総合スコア310

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

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

web

2017/01/04 01:19

返信が遅くなり申し訳ありません。 教えて頂いた記述に $('.btn').click(function(e) { を追加することで、ボタンをクリックした際にアラートを出すことに成功しました! さらに画面遷移しないようにしたいので、また別で質問させて頂きます。 ありがとうございました。
guest

0

foreach等どうでしょう

javascript

1 var a=0; 2 $("select").each(function(){ 3 a+=$("option:selected",this).index(); 4 }); 5 if(a==1){ 6 //何かの処理; 7 return false; 8 }else{ 9 alert("どれか一つ選択してください"); 10 } 11

投稿2016/12/28 09:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

web

2017/01/04 01:19

返信が遅くなりすみません。 ご回答いただきありがとうございました。
guest

0

このフォームのサブミット時に
document.getElementById("productoptions_1") > 0
のようなチェックを各select文に関して行い、それらが1未満ならアラートを出してサブミットしないようにするイベントドリブンのjavascriptを用意しておくような流れになるかと思われます。

投稿2016/12/28 09:01

編集2016/12/28 09:14
seastar3

総合スコア2285

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

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

web

2017/01/04 01:19

返信が遅くなりすみません。 ご回答いただきありがとうございました。
guest

0

requiredをタグの最後につければよいのではないでしょうか?

<select id="productoptions_1" name="productoptions[1]" style="" required>

投稿2016/12/28 01:16

s.t.

総合スコア2021

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

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

s.t.

2016/12/28 01:21

javascriptでしたね。 であれば、DOMでselectが何を選択しているかをjavascript側で取得してやれば問題ないと思われます。
web

2016/12/28 01:22

s.t.様、回答ありがとうございます。 すみません、説明不足だったのですが、このHTMLが動的に出力されているものでして、 わたしの方でHTMLタグ自体を触ることが出来ない状況です。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問