![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
複数のチェックボックス項目があり、そのチェック状態によって
処理を分岐したいのですが、スマートなjavascriptの書き方が
あれば教えてください!
【例】
<input type="checkbox" name="koumokuA" value="A1" />
<input type="checkbox" name="koumokuA" value="A2" />
<input type="checkbox" name="koumokuA" value="A3" />
<input type="checkbox" name="koumokuA" value="A4" />
<input type="checkbox" name="koumokuA" value="A5" />
<input type="checkbox" name="koumokuB" value="B1" />
<input type="checkbox" name="koumokuB" value="B2" />
<input type="checkbox" name="koumokuB" value="B3" />
<input type="checkbox" name="koumokuB" value="B4" />
<input type="checkbox" name="koumokuC" value="C1" />
<input type="checkbox" name="koumokuC" value="C2" />
<input type="checkbox" name="koumokuC" value="C3" />
<input type="checkbox" name="koumokuC" value="C4" />
もし【koumokuA】のA2とA3、【koumokuB】のB1とB4が選択された場合
同項目ではor条件、他項目ではand条件で処理したいので
考え方としては、
if(koumokuA=="A2" || koumokuA=="A3"){
if(koumokuB=="B1" || koumokuB=="B4"){
実行内容
}
}
こんな感じなのですが、
実際にはチェックボックスの値は配列になるのでこのスクリプトでは動かない点と
効率よく複数のチェックボックスの選択結果を判定して、スクリプトを実行する
組み方があればご教授ください。
実行結果は、データが格納された配列の中から、選択項目に対応したデータを
表示するようにしたいのです。
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>組み合わせのパターンを最初から設定しておく
組み合わせのパターンというか、if文で書いていた条件を直感的に記述できるようにしただけです。
if(koumokuA=="A2" || koumokuA=="A3"){
if(koumokuB=="B1" || koumokuB=="B4"){
が
'A2 A3 * B1 B4' に相当します。
「処理」の部分がどのようなものかにもよりますが
datalistを廃止し、
for(i in datalist) {
~
}
という部分を
if(CB_check('A2 A3 * B1 B4')) {
~処理~
}
if(CB_check('A1 * B2 B3 * C1')) {
~処理~
}
とする必要があるかもしれません。
No.3
- 回答日時:
とりあえず条件を分りやすくコーディングできるようにしてみたけど、
キカイ的になりすぎて応用は効かないかもしれない。
<html>
<head>
<title></title>
<script type="text/javascript">
function sample(){
var datalist = { // 条件 と 処理(データ?なんならfunctionを書いても。)
'A2 A3 * B1 B4':'処理1',
'A1 * B2 B3 * C1':'処理2',
'B1':'処理3'
};
var CB = {};
var CBS = document.getElementById('checkbox').getElementsByTagName('input');
var C;
var i=0;
while(C=CBS[i++]) {
CB[C.value] = C.checked;
}
for(i in datalist) {
if(CB_check(i)) {
//ここに処理を。
alert(i +'::'+datalist[i]+'実行する');
}
else alert(i +'::'+datalist[i]+'実行しない');
}
function CB_check(str){
str=str+' *';
var dt=str.split(/ /);
var flg = false;
for(var i=0;dt[i];i++) {
if(dt[i] == '*') {
if(! flg) return false;
flg = false;
} else {
flg |= CB[dt[i]];
}
}
return true;
}
}
</script>
</head>
<body>
<div id="checkbox">
<p>
A1<input type="checkbox" name="koumokuA" value="A1" />
A2<input type="checkbox" name="koumokuA" value="A2" />
A3<input type="checkbox" name="koumokuA" value="A3" />
A4<input type="checkbox" name="koumokuA" value="A4" />
</p><p>
B1<input type="checkbox" name="koumokuB" value="B1" />
B2<input type="checkbox" name="koumokuB" value="B2" />
B3<input type="checkbox" name="koumokuB" value="B3" />
B4<input type="checkbox" name="koumokuB" value="B4" />
</p><p>
C1<input type="checkbox" name="koumokuC" value="C1" />
C2<input type="checkbox" name="koumokuC" value="C2" />
</p>
<div>
<p>
<input type="button" value="Check" onclick="sample()" />
</p>
</body>
</html>
この回答への補足
回答ありがとうございます。
これは、組み合わせのパターンを最初から設定しておくという理解でよろしいのでしょうか?
もしそうだとすると、今回のサンプルくらいのものだと良いのですが
実際にやりたいことは、項目が10種類くらいで、それぞれに選択項目が5~10くらいに
なりそうなので、かなり厳しくなりそうです。
そのあたりを効率化できる方法があれば助かります。
No.2
- 回答日時:
>同項目ではor条件、他項目ではand条件で処理したいので~~
の意味が良く分かりません。
同項目ではor条件----同じ名前の項目群で一つでもチェックがあればtrue
他項目ではand条件---各項目群全てがtrueでなければfalse ということ?
後半が本当にそういう意味か不明なので、前半の処理だけを組み込んでみました。
>効率よく複数のチェックボックスの選択結果を判定して~~
最低1回は各要素を見る必要はあるでしょうから、結果を連想配列的に記録すればよさそう。
以下ご参考まで。(inputの数は減らしてあります)
結果(result)には、チェックのある項目名だけが残ります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
<!--
function check(f) {
var e, i = 0, elm = f.elements, result = [];
while ( e = elm[i++]) if (e.type == "checkbox" && e.checked) result[e.name] = true;
//以下、結果確認用表示
var m=""; for (i in result) m += ", " + i; alert(m.substr(2));
}
//-->
</script>
</head>
<body>
<form>
<input type="checkbox" name="koumokuA" value="A1">A1
<input type="checkbox" name="koumokuA" value="A2">A2
<input type="checkbox" name="koumokuA" value="A3">A3
<input type="checkbox" name="koumokuB" value="B1">B1
<input type="checkbox" name="koumokuB" value="B2">B2
<input type="checkbox" name="koumokuB" value="B3">B3
<input type="checkbox" name="koumokuC" value="C1">C1
<input type="checkbox" name="koumokuC" value="C2">C2
<input type="checkbox" name="koumokuC" value="C3">C3
<button type="button" onclick="check(this.form)">check</button>
</form>
</body>
</html>
この回答への補足
具体例がないとわかりづらいですね。
申し訳ありません。
例えば、
koumokuAでは、年代(10代、20代、30代)
koumokuBでは、趣味(スポーツ、音楽、映画)
koumokuCでは、性別(男、女)
のような感じで、配列の中に個人データが入っていて、その中から
「10代~20代で音楽好きの女性」を選ぶというようなイメージです。
よろしくお願い致します。
No.1
- 回答日時:
まずちぇっくぼっくすをあつめる
そいつらをる~ぷして、えらばれているか、しらべる。
そのときに、びっとしふとして、すうちかしてみる
30こ、くらいにしてね
var chk = document.getElementsByName( 'koumokuA' );
var bit = 0;
var i = 0;
var c;
while( c = chk[ i++ ] ) bit = (bit << 1) + c.checked;
alert(bit);
この回答への補足
回答ありがとうございます。
bitの意味がイマイチわかっていないのですが、選択されたものによって
結果の数値が変わるようなので、その数値によって、
実行内容を条件分岐するということなのでしょうか?
質問内容がわかりづらかったので、上の回答に補足を付けましたので
もし、よろしければ再考していただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【jsp/Java】チェックボックス...
-
オフになっているチェックボッ...
-
チェックボックスのON/OFFでVal...
-
チェックが入っていなかったら...
-
特定のID(またはクラス)で括ら...
-
メールフォームで送信
-
チェックボックスが複数ある場...
-
選択したラジオボタンが画面の...
-
チェックボックスの設定
-
checkboxの選択数制限と排他処...
-
チェックボックスのグループ化...
-
背景色を変えて未入力チェック...
-
チェックボックスのvalueを、テ...
-
selectメニューによるチェック...
-
複数のチェックボックス項目が...
-
if文でelseを使わずに否定
-
JSP内で可変するチェックボック...
-
checkboxをクリックしてリロー...
-
チェックボックスに全てチェッ...
-
return trueとreturn falseの用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスのON/OFFでVal...
-
【jsp/Java】チェックボックス...
-
チェックボックスのON/OFFに応...
-
背景色を変えて未入力チェック...
-
チェックボックスの設定
-
checkboxをクリックしてリロー...
-
JSP内で可変するチェックボック...
-
チェックボックスが複数ある場...
-
一つのチェックボックスのON/OF...
-
EclipseでSpringを使用し、テー...
-
チェックボックスで指定したも...
-
チェックが入っていなかったら...
-
チェックボックスに全てチェッ...
-
複数のチェックボックス項目が...
-
checkboxの選択数制限と排他処...
-
特定のID(またはクラス)で括ら...
-
Objective-Cでチェックボックス...
-
配列のチェックボックスをjavas...
-
確認ページからフォームページ...
-
複数あるチェックボックスから...
おすすめ情報