• ベストアンサー

selectボックスで選択数を制限したい

入力画面を作成しています。 この画面に、複数選択可能なselectボックスを配置したいと思っています。 この時、選択できる個数を制限したいのですがどのようにすればよいでしょうか? <select multiple size="3" name="test">   <option value="" selected></option>   <option value="1">A</option>   <option value="2">B</option>   <option value="3">C</option>   <option value="4">D</option>   <option value="5">E</option> <select> 初期値が「""」となっており、selectボックスで何も選択せずに登録することも可能で、 何か選択された時は、最大3つまでしか選択できないようしたいと思っております。 そして、最大3つまでしか選べようにした上で、その3つの中に初期値の「""」が含まれていた場合はメッセージを表示させる。 以上の事をやりたいのですが、どのようにすれば良いでしょうか? 助けてください。よろしくお願いします。

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

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

<form id="f1" action="next.cgi" method="POST">  <select id='field1' size=7 multiple>   <option value=''></option>   <option value=1>1</option>   <option value=2>2</option>   <option value=3>3</option>   <option value=4>4</option>   <option value=5>5</option>  </select>  <input type='button' value='go' onclick='on()' /> </form> <script type='text/javascript'><!-- function on() {  var field1 = document.getElementById('field1');  var selectedCount = 0;    // 選択されている個数を取得  for(ii=0;ii<field1.options.length;ii++) {   if(field1.options[ii].selected) {    selectedCount++;   }  }    // 0番目選択の検査  if(field1.options[0].selected) {   alert('0番目が選択されちょる');   return false;  }    // 3個以上選択の検査  if(selectedCount > 3) {   alert('3個以上選択されちょる');   return false;  }    // 正常処理  document.getElementById('f1').submit(); } // --></script> こんな感じかな。 selectタグで4つめを選択した瞬間にアラートを出すのは難しいです。 何かしらの方法はあるかもしれませんが。

searching
質問者

お礼

wp_様 ご回答ありがとうございます。 連絡が遅くなってしまいましたが、教えていただいた方法で見事実現できました。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>その3つの中に初期値の「""」が含まれていた場合はメッセージを表示させる ""のデータはほかの何かを選んだ時にチェックからはずしてはどうですか? とりあえずこんな感じで <script> array1=new Array(); function check(obj){ var array2=new Array(); var count=0; var opt=obj.options; for(var i=0;i<opt.length;i++){ if(opt[i].selected) count++ array2[i]=opt[i].selected; } if(count==0) opt[0].selected=true; if(count>1 && opt[0].selected){ opt[0].selected=false; count--; } if(count>3){ for(var i in array1){ opt[i].selected=array1[i]; } alert("3つまで!") return false; } array1=array2; } </script> <form> <select multiple size="6" name="test" onChange="check(this)"> <option value="" selected>選択して</option> <option value="1">A</option> <option value="2">B</option> <option value="3">C</option> <option value="4">D</option> <option value="5">E</option> </select> </form> こういうものはチェックボックスで処理した方が楽だしきれいだと 思いますよ

searching
質問者

お礼

yambejp様 ご回答ありがとうございます。 連絡が遅くなってしまいましたが、無事やりたい事が実現できました。 >""のデータはほかの何かを選んだ時にチェックからはずしてはどうですか? このご意見は大変参考になりました。 >こういうものはチェックボックスで処理した方が楽だしきれいだと >思いますよ 確かに、yambejp様のおっしゃるとおり、チェックボックスの方が簡単に実現できたのですが、 selectボックスの値が動的に変わってしまうので、チェックボックスにできませんでした。 でも、今回は皆様のおかげで見事実現できました。 ありがとうございました。

関連するQ&A

  • selectフォームの未選択の項目にフラグ

    下記のselectフォームを用いてASPにデータを渡したいのですが、 未選択の項目にフラグを立てて(例えば"0")データを渡すことは可能でしょうか? ご教授宜しくお願い致します。 <select name="hoge" multiple> <option value="1" selected>111</option> <option value="2">222</option> <option value="3">333</option> <option value="4">444</option>

  • Selectボックスの幅を自動で広げたい

    Selectボックスの幅を自動で広げたい Jqueryを使って、DBから取得した値を下記のようにSelectボックスに入れています。 $('select#name).prepend('<option value="' + val[1] + '">' + val[2] + '</option>'); HTMLの方は下記のように設定してあり、 <select id="name"> </select> 値もきちんと挿入されます。 ただ、値が入ったあとのSelectボックスの幅が狭くて、選択した後に全部表示されていない状態です。 これを入れた値の文字数に応じて、またはこのSelectボックスが複数あるのですが、最大文字数に合わせた幅に自動で設定するのにはどうやってやればいいのでしょうか。 下記のように試してみたのですが、うまくいきませんでした。 <select id="name" style="width:auto;"> </select> <select id="name" style="width:100%;"> </select> どなたかおわかりの方いらっしゃいましたら教えてください、 よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • SELECTボックスの内容を動的に変えるには

    2つのSELECTボックスを用意し、1つ目のSELECTボックスの内容により 2つめのSELECTボックスの内容(項目数も含め)を変える方法を教えてください。 下記のようなHTMLを作ってみましたが、2つ目のSELECTボックスに項目がないため「オブジェクトがありません」のエラーが出ます。 ------------------------------------------------------- <html> <head> <SCRIPT language="vbscript"> <!-- option explicit sub selchng() dim strsel strsel = sel1.selectedIndex Select Case strsel Case "1" sel2.item(0).value = "1" sel2.item(0).text = "1" sel2.item(1).value = "2" sel2.item(1).text = "2" Case "2" sel2.item(0).value = "a" sel2.item(0).text = "a" sel2.item(1).value = "b" sel2.item(1).text = "b" sel2.item(2).value = "c" sel2.item(2).text = "c" Case else sel2.item(0).value = "A" sel2.item(0).text = "A" End Select end sub --> </SCRIPT> </head> <body> <select name="sel1" onchange=selchng()> <option value="1" selected>1</option> <option value="2" >2</option> <option value="3" >3</option> </select> <select name="sel2"> </select> </body> </html>

  • セレクトボックス の 選択規制

    今、フォームで入力画面を作っています。 その中にセレクトボックスが4つアリ、現在「未選択」の場合エラーチェックをするようにしています。 そして、ここにもうひとつのチェックを追加したいのですが皆目見当が付きません・・・ 条件 kaikai、bunkai1、bunkai2、heikai  全てが不参加の場合 "参加する会を最低一つは選択してください。"と言うコメントをだすというものです。 皆様よろしくお願いいたします。 ********  現在の JavaScript  ********* <SCRIPT language="JavaScript"> <!-- //フォームチェック function fcheck() { if(document.form1.kaikai.value == "未選択") { window.alert("選択してください"); return false; } if(document.form1.bunkai1.value == "未選択") { window.alert("選択してください"); return false; } if(document.form1.bunkai2.value == "未選択") { window.alert("選択してください"); return false; } if(document.form1.heikai.value == "未選択") { window.alert("選択してください"); return false; } } //--> </SCRIPT> ********  HTML内のフォーム  ********* <table> <tr><th>1 ( * )</th> <td> <SELECT NAME="kaikai"> <OPTION selected VALUE="未選択">選択してください</OPTION> <OPTION VALUE="参加">参加</OPTION> <OPTION VALUE="不参加">不参加</OPTION> </SELECT></td></tr> <tr><th>2 ( * )</th> <td> <SELECT NAME="bunkai1"> <OPTION selected VALUE="未選択">選択してください</OPTION> <OPTION VALUE="参加">参加</OPTION> <OPTION VALUE="不参加">不参加</OPTION> </SELECT></td></tr> <tr><th>3 ( * )</th> <td> <SELECT NAME="bunkai2"> <OPTION selected VALUE="未選択">選択してください</OPTION> <OPTION VALUE="参加">参加</OPTION> <OPTION VALUE="不参加">不参加</OPTION> </SELECT></td></tr> <tr><th>4 ( * )</th> <td> <SELECT NAME="heikai"> <OPTION selected VALUE="未選択">選択してください</OPTION> <OPTION VALUE="参加">参加</OPTION> <OPTION VALUE="不参加">不参加</OPTION> </SELECT></td></tr> </table>

  • セレクトボックスの初期選択をクッキーで固定したい。

    お世話になります。 php とmysql 初心者です。 php でmysqlから以下のようなセレクトボックスを作りました。 このセレクトボックスの初期値を(selected)を 見る人によって$cookie値によって固定したいのですが いろいろググったりしたのですが、 見当もつかず理屈から全くわかりません。 phpだけでできるのでしょうか? javascript等必要でしたら できれば具体的に教えて頂ければ大変助かります。 どうかご教授の程よろしくお願い致します。 <? $sql = "SELECT * FROM table ORDER BY index ASC"; $res = mysql_query( $sql ); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ if($cookie==$row['index']){ $options.="<option value='{$row['index']}'selected>{$row['name']}</option>\n";} else { $options.="<option value='{$row['index']}'>{$row['name']}</option>\n";} } $select="<select name='name'><option value=''>選択</option>\n{$options}</select>\n"; print $select; ?>

    • 締切済み
    • PHP
  • HTMLのSELECTタグの使い方、JSPのセッション格納について

    HTMLのSELECTタグの使い方、JSPのセッション格納について Jspで開発をしております。IE7以上です。 同一画面内でボックスで選択した値をそのままセッションに格納したいのです。 Javascriptで制御したいのですが、なにかいい方法をご存知ですか? <script type="text/javascript"> function test(obj) { with(obj) { form.text1.value = options[selectedIndex].value; } } </script> <SELECT NAME="select1" onchanged="test(this)"> <OPTION VALUE=1>First <OPTION VALUE=2 selected>Second <OPTION VALUE=3touya">Theard </SELECT> またselectedでは初期の表示のみ選べて値の初期値はscript側で設定するのでしょうか? これだとボックスに変化があれば値が取得できるみたいです。 できればボックスをいじらなければ初期表示の値をセッションに格納。 ボックスをいじれば選択した値をセッションに格納。

  • 複数選択された値を取得したい

    複数選択可のリストボックスを使用してパラメータをPOSTで送った時、その値の取得方法がわかりません。 例えば <select name="select" multiple> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> </select> というリストボックスがあります。 02、03、04を選択して送信した時に、$_POST[select]の中には04しか入っていません。 選択された値を配列にして全て取得したいのですが、どのようにすれば良いのでしょうか? アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • セレクトボックスの選択項目を変える

    セレクトボックスの選択項目を変えるには どうすればいいですか? <FORM action=./ method=post> <SELECT name=server> <OPTION value=2 selected>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> </SELECT> </FORM> こういうフォーム(FORMやOPTIONにnameがない)で [4]を選択したいです このフォームを書き換えないで(スクリプトでの書き換えなら○) どうにか変えることはできないでしょうか? IEのみの対応でいいので、お願いします

  • リストボックス全選択について

    JavaScriptについて質問です。 リストボックスA,B と プルダウンC という画面項目があると仮定し、 submitボタンを押下したとき、 リストボックスA,Bの項目全てが全選択され、プルダウン項目はそのままにしたいと考えております。 下記のソースのように作成したのですが、 リストボックスが全選択されるところまでは良いのですが、 プルダウン項目が最後の項目が選択された状態になってしまいます。 リストボックスだけが全選択され、プルダウン項目はそのままにするにはどうしたら良いでしょうか。 かなり困ってます。 どなたか助けてください。。 以下ソースです。 <html> <head> <script language="JavaScript"> <!-- function selectAll(){  var str = document.getElementsByTagName("option"); for(i=0;i<str.length;i++){ str[i].selected = true; } } //--> </script> </head> <body> <table> <tr> <td> リストA<br> <select name="listboxA" multiple> <option value="サンプル1">サンプル1</option> <option value="サンプル2">サンプル2</option> <option value="サンプル3">サンプル3</option> </select> </td> <td> リストB<br> <select name="listboxB" multiple> <option value="サンプル4">サンプル4</option> <option value="サンプル5">サンプル5</option> <option value="サンプル6">サンプル6</option> </select> </td> <td> プルダウンC<br> <select name="Pdown"> <option value="サンプル7">サンプル7</option> <option value="サンプル8">サンプル8</option> <option value="サンプル9">サンプル9</option> </select> </td> </tr> </table> <br> <input type=submit value="送信" onClick="selectAll()"> </body> </html>

  • selectボックスの選択結果を変数に代入したい

    ブログのホームページで過去のブログカレンダーを表示させるために、年と月をセレクトボックスから入力して希望の年月のカレンダーを表示させようと頑張っています。 下記プログラムを作成しましたが、selectボックスから選択した年号を変数に代入することが出来ず、取得した年号をjavaの内部処理に使うことが出来ません。 考えられることはいろいろやってみましたが、全て変数に代入するところでうまくいきません。 よろしくご指導お願いします。 <html> <head> <title>選択された表示テキストを取得する</title> </head> <body> <select name="year" onchange="alert(getSelectedText(this))"> <option value="1">2014</option> <option value="2">2013</option> <option value="3">2012</option> </select><a>年</a> <script type="text/javascript"> function getSelectedText(obj){ var txt = obj.options[obj.selectedIndex].text; // 表示テキスト取得 return 'text = ' + txt; // 表示テキストをリターン var selectYear = text; // 表示テキストを変数に代入 } alert(selectYear); // 変数の内容をアラート表示 /*if(selectYear==2014){           // 変数を内部処理に使用 document.write('\ <select name="month" onchange="selectMonth(this)">\ <option value="1">1</option>\ <option value="2">2</option>\ <option value="3" selected>3</option>\ <option value="4">4</option>\ </select><a>月</a>\ ');*/ </script> </body> </html>