![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは。PHP学習中のものですが、今回はこちらで質問させていただきます。
現在、複数のチェックボックスをワンクリックですべて選択する方法を調べています。
チェックボックスのNAMEがすべて同じ場合は、ちょっと検索すれば、すぐにサンプルスクリプトがたくさんヒットします。
複数選択可能なチェックボックスの場合も、document.form1.elements["sample_check[]"] というような記述で、チェックボックスの数がカウントできるということまでは判りました。
しかし、現在わたしが扱っているチェックボックス(下記をご参照ください)には、sampla_check[3] のように規則性のない数字が入っているのです。
(この数字を送信先で受けて、それをもとにmySQLのデータを更新するので省略できません)
このような場合、どのようにしたら「チェックボックスをすべて選択」する機能を実装できるでしょうか。
本来、javascriptの入門書でも購入して、自分で学習すべき範疇のことかと思いますが、今すぐ答えが必要なので、どなたかお助けいただけないでしょうか。
<INPUT TYPE="checkbox" NAME="sample_check[3]" VALUE="TRUE"> 項目(3)
<INPUT TYPE="checkbox" NAME="sample_check[7]" VALUE="TRUE"> 項目(7)
<INPUT TYPE="checkbox" NAME="sample_check[12]" VALUE="TRUE"> 項目(12)
No.3ベストアンサー
- 回答日時:
こんにちは。
JavaScriptはやっておいて損はないと思います。頑張ってください。
以下の動作でお望みのものになると思います。
全部を舐めるのは同じで以下の動作が追加されています。
引数にターゲットとなるエレメント名を追加し、どちらのボタンが押されたか判断する。
checkboxかつ指定されたターゲット名が含まれるエレメントだった場合は指定されたフラグでcheckedを変更する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>複数のチェックボックス&配列にランダムな数字</title>
<script type="text/javascript">
function check ( target, isCheck ) {
var max = document.form1.elements.length;
for ( var i = 0; i < max; i ++ ) {
var obj = document.form1.elements[i];
if ( obj.type == 'checkbox' && obj.name.indexOf(target) != -1 ) {
obj.checked = isCheck;
}
}
}
</script>
</head>
<body>
<form name="form1">
<input type="checkbox" name="sample_check[3]" value="true" /> 項目(3)
<input type="checkbox" name="sample_check[7]" value="true" /> 項目(7)
<input type="checkbox" name="sample_check[12]" value="true" /> 項目(12)
<br />
<input type="checkbox" name="test_check[3]" value="true" /> 項目(3)
<input type="checkbox" name="test_check[7]" value="true" /> 項目(7)
<input type="checkbox" name="test_check[12]" value="true" /> 項目(12)
</form>
<button type="button" onclick="check('sample_check',true);">sample_全選択</button>
<button type="button" onclick="check('sample_check',false);">sample_全解除</button>
<br />
<button type="button" onclick="check('test_check',true);">test_全選択</button>
<button type="button" onclick="check('test_check',false);">test_全解除</button>
</body>
</html>
丁寧な回答ありがとうございます!
「 check('test_check',true)」とターゲット名指定したうえで「obj.name.indexOf(target) != -1」と判定するってことですよね。
javascriptについては何も知らないプログラミング初心者ですが、VBAとPHPをかじったので、教えてもらえばなんとなく、どういう処理をしているのか見当がつくようになりました。
すこしでも速くPHP & mySQLおぼえて、javascriptの学習に取り組めるようにしたいと思います。
ご指導ありがとうございました。
No.4
- 回答日時:
データの持たせ方がおかしいですね
<INPUT TYPE="checkbox" NAME="sample_check[]" VALUE="3"> 項目(3)
<INPUT TYPE="checkbox" NAME="sample_check[]" VALUE="7"> 項目(7)
<INPUT TYPE="checkbox" NAME="sample_check[]" VALUE="12"> 項目(12)
こうすれば同じ名前のオブジェクトとして処理できます
ご指摘ありがとうございます。
このチェックボックスを含むページを作ってから気づいたのですが、複数のチェックボックスの情報を配列で受け取る場合は、チェックされたところだけ要素として渡されるんですね。
当初は、10個チェックボックスがあって、そのうち3つチェックされていた場合、残りの7つも空白文字(またはNULL)の要素として渡されるのかと思ってました(なのでforeach($check_array as $key => $value)で$valueがTRUEのときだけSQLクエリを実行するようなことをしてました)。
やっぱり、この処理を修正するのが王道なんでしょうね。
数が多いので大変ですが、今後のためにも頑張ってやってみようかと思います。
(そもそもクラスとか使ってオブジェクト指向っぽく作っておけば、修正も一発だったのかもしれませんが、そこらへんはまだよくわからないのです)
No.2
- 回答日時:
for (var i = 0; i < 31) {
var o = document.getElementsByName("sample_check[i]").item(0);
if (o) {
o.checked = true;
}
}
こんな感じでやってみてはどお?
var inputs = getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].type == "checkbox" && inputs[i].name.indexOf("sample_check") == 0) {
inputs[i].checked = true;
}
}
こんなのでもいいと思う
動作確認はしていないのでエラーはゴメンね
ご回答ありがとうございます。
どの言語でもそうですが、解答は一つではないんですね。
自分でも常に3通りくらいの方法が思いつけるように勉強したいと思います。
勉強になりました。
ありがとうございます。
No.1
- 回答日時:
こんにちは。
以下のサンプルで確認しました。
理屈としてはform1の中にあるエレメントすべてを舐めて、checkboxだった場合、フラグに設定された真偽値をcheckedに設定します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>複数のチェックボックス&配列にランダムな数字</title>
<script type="text/javascript">
function check ( isCheck ) {
var max = document.form1.elements.length;
for ( var i = 0; i < max; i ++ ) {
var obj = document.form1.elements[i];
if ( obj.type == 'checkbox' ) {
obj.checked = isCheck;
}
}
}
</script>
</head>
<body>
<form name="form1">
<input type="checkbox" name="sample_check[3]" value="true" /> 項目(3)
<input type="checkbox" name="sample_check[7]" value="true" /> 項目(7)
<input type="checkbox" name="sample_check[12]" value="true" /> 項目(12)
</form>
<button type="button" onclick="check(true);">全選択</button>
<button type="button" onclick="check(false);">全解除</button>
</body>
</html>
この回答への補足
早速のご回答ありがとうございます!
なるほど。こういうやり方があるんですね!PHPの学習が一段落したら、次はやっぱりjavascriptだなという思いを新たにしました。
ところで、実は、同じページにチェックボックスが2種類ありまして、以下のような感じになっているのです。
こういうよう様な場合に、ボタンAを押したらsample_checkだけチェック、ボタンBを押したらtest_checkだけチェックのような処理をすることは可能でしょうか。
<td><input type="checkbox" name="sample_check[3]" value="true" /> 項目(3)</td>
<td><input type="checkbox" name="sample_check[7]" value="true" /> 項目(7)</td>
<td><input type="checkbox" name="sample_check[12]" value="true" /> 項目(12)</td>
<td><input type="checkbox" name="test_check[3]" value="true" /> アイテム(3)</td>
<td><input type="checkbox" name="test_check[7]" value="true" /> アイテム(7)</td>
<td><input type="checkbox" name="test_check[12]" value="true" /> アイテム(12)</td>
もちろん、1つのボタンで両方チェックされたとしても、nameの違うsubmitボタンを2つ用意して、submit_01が押されてPOSTした場合はsample_check[]の配列を読み、submit_02の場合はtest_check[]の配列を読むという処理もできると思いますが、できればどちらかだけ「すべてチェック」できればスマートだと思います。
お手数でなければ、いま少しご指導いただけないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) シートを選択して、1つのPDFにしたいのですが。 5 2022/10/03 20:18
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ドロップダウンメニューで選択...
-
【jsp/Java】チェックボックス...
-
クリアボタンの動作について
-
複数のチェックボックス項目が...
-
背景色を変えて未入力チェック...
-
チェックボックスのON/OFFに応...
-
EclipseでSpringを使用し、テー...
-
複数のチェックボックス&配列...
-
チェックボックスとラジオボタ...
-
JavaScriptで入力制御&チェッ...
-
チェックボックスが複数ある場...
-
プルダウン 項目が多いので先頭...
-
onchangeイベントを強制的に発...
-
return trueとreturn falseの用...
-
value内に変数を入れたい
-
submitした値を返したい
-
ラジオボタン未チェックの場合...
-
テキストボックスの中身を選択...
-
ラジオボタンにタブインデック...
-
フォーム内で記入したクエリ送...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスのON/OFFでVal...
-
【jsp/Java】チェックボックス...
-
チェックボックスのON/OFFに応...
-
背景色を変えて未入力チェック...
-
チェックボックスの設定
-
checkboxをクリックしてリロー...
-
JSP内で可変するチェックボック...
-
チェックボックスが複数ある場...
-
一つのチェックボックスのON/OF...
-
EclipseでSpringを使用し、テー...
-
チェックボックスで指定したも...
-
チェックが入っていなかったら...
-
チェックボックスに全てチェッ...
-
複数のチェックボックス項目が...
-
checkboxの選択数制限と排他処...
-
特定のID(またはクラス)で括ら...
-
Objective-Cでチェックボックス...
-
配列のチェックボックスをjavas...
-
確認ページからフォームページ...
-
複数あるチェックボックスから...
おすすめ情報