複数のcheckboxにチェックが入っているか確認後、送信先で値を受け取る【jQuery/PHP】

プログラム

複数のcheckboxにチェックが入っているか確認する方法

自分が仕事をしていた時にちょっと詰まったところ。
やりたいことは

フォーム送信前に複数あるcheckboxに一つ以上チェックされているか確認

一つ以上チェックが入っていればpost送信、入っていなければエラーとしalertで警告して送信しない

というもの。

checkboxのサンプルhtml

<form name="form1">
<div>ITエンジニアってどうですか?(必須)</div>
<div>
<input type="checkbox" name="ckbox[]" value="1">最高<br>
<input type="checkbox" name="ckbox[]" value="2">まあまあ<br>
<input type="checkbox" name="ckbox[]" value="3">最悪<br>
<input type="checkbox" name="ckbox[]" value="4">止めたほうが良い<br>
<input type="checkbox" name="ckbox[]" value="5">もうだめだ<br>
</div>
<button onclick="ck()">送信</button>
</form>

Javascript(jQuery)はこちら

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
function ck(){
var err = '';
var ckflg = 0;

$('input[name="ckbox[]"]:checked').each(function(index, value){
 ckflg++;
});

if(ckflg==0){
 err += "チェックボックスは最低1つチェックして下さい\n";
}

if(err==''){
 if(confirm("この内容で送信します")){
    elm = document.form1;
    elm.target = "_self";
    elm.action = "test.php";
    elm.submit();
 }
}else{
 alert(err);
 return false;
}
}
</script>

送信先では

<?php
foreacn($_POST['ckbox'] as $v){
 echo $v.'<br>';
}
?>

foreachなどで送信されたcheckbox配列の値を取得できます。

ポイント

チェックボックスのnameは配列型

<input type="checkbox" name="ckbox[]" value="1">最高<br>
チェックボックスのnameにckbox[](配列)を使用。配列型にすると追加があった時に楽ちんです。

Jqueryのeachを使ってチェックボックスの値を確認

jQueryのeachを使用します。

$('input[name="ckbox[]"]:checked').each(function(index, value){
 ckflg++;
});

上記はnameがckbox[]のフォームにチェック(:checked)されているものがあったら、その配列番号(index)と値(value)を取得する処理となります。

チェックされている場合だけ処理が動くので、その時はフラグ変数(ckflg)に++で加算。
ckflgが0ならチェックされていないということでエラー処理に入ります。

また今回はチェックの有無のみの確認なので

$('input[name="ckbox[]"]:checked').each(function(){

としてもOKです。

jQuery・each構文の解説ドキュメントはこちら。

ちなみに自分が詰まったところは

$('input[name="ckbox[]"]:checked')

の書き方。”と’の位置を間違えてエラーを出してました。

サンプルプログラム全文

古臭い書き方で書いています。

<html lan="ja">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
function ck(){
var err = '';
var ckflg = 0;
$('input[name="ckbox[]"]:checked').each(function(index, value){
  ckflg++;
});

if(ckflg==0){
 err += "チェックボックスは最低1つチェックして下さい\n";
}
if(err==''){
  if(confirm("この内容で送信します")){
  elm = document.form1;
  elm.target = "_self";
  elm.action = "test.php";
  elm.submit();
}
 alert(err);
 return false;
}
</script>
</head>
<body>
<form name="form1">
<input type="checkbox" name="ckbox[]" value='1'>最高<br>
<input type="checkbox" name="ckbox[]" value='2'>まあまあ<br>
<input type="checkbox" name="ckbox[]" value='3'>最悪<br>
<input type="checkbox" name="ckbox[]" value='4'>止めたほうが良い<br>
<input type="checkbox" name="ckbox[]" value='5'>もうだめだ<br>
<button id="ckbutton" onclick="ck()">送信</button>
</form>
</body>
</html>

コメント

タイトルとURLをコピーしました