5

私はjqueryを初めて使用します。非常に興味深いですが、少し問題があります。このようなforeachループを使用して、データベースから複数のチェックボックスを作成しています。

<? foreach($cities as $city) { ?>
    <input type="checkbox" name="city[]" value="<?=$city->id?>" id="city[]" />
<? } ?>

ユーザーが少なくとも1つのチェックボックスをチェックするように制限したいのですが、1つのチェックボックスだけでこれを行う方法を知っていますが、jqueryのこの種の配列と混同されました。よろしくお願いします!

4

5 に答える 5

17

チェックされているチェックボックスの数を確認するには、次のようなものを使用できます。

var checkedNum = $('input[name="city[]"]:checked').length;
if (!checkedNum) {
    // User didn't check any checkboxes
}

name(PHPループから)すべてのチェックボックスに同じ属性を提供しているため、セレクターを使用しinput[name="city[]"]てそれらすべてをターゲットにして見つけることができます。ただし、特にチェック:checkedされている数を確認するには、セレクターを追加できます。これに代わる方法は、 を使用すること$('input[name="city[]"]').filter(":checked")です。

最後に、0 は false であるため、0 の場合!checkedNumのみ合格します。checkedNumそれ以外の数値は真実であり、条件を満たさない!checkedNum.


参考文献:

于 2013-04-23T05:47:49.757 に答える
2

少なくとも1つのチェックボックスをオンにしたい場合は、これを使用できます

var somethingChecked = false;
$("input[type=checkbox]").each(function() {
  if(this).is(':checked')) {
    somethingChecked = true;
  }
});
if(!somethingChecked) {
  alert("You haven't checked anything yet");
}

これが行うことは、変数を false に初期化することです。次に、スクリプトはタイプ チェックボックスのすべての入力をループします。項目がチェックされている場合は、変数を true に設定します。最後に、変数がまだ false かどうかを確認します。そうである場合は、エラーを表示します。

于 2013-04-23T05:45:23.380 に答える
0

#my_formフォームのIDとして持っていると仮定すると、次のことができます

$("#my_form input[type=checkbox]:checked"). // ... do something

チェックボックスをオンにして何かを選択して実行します。あなたもできる

$("#my_form input[type=checkbox]").each(function(idx, elem) {
   var is_checked = $(this).prop("checked");
   // Do something with is_checked
});

すべてのチェックボックスを繰り返し、チェックされているかどうかを確認します。

于 2013-04-23T05:44:19.137 に答える
0

まず第一にid、チェックボックスは一意でなければなりません。

このようにしてください

<? 
$checkBoxCount = 0;
foreach($cities as $city) { ?>
    <input type="checkbox" name="city[]" value="<?=$city->id?>" id="chkbox-<?=$checkBoxCount?>" />
<? } ?>

jQuery チェックでは、チェックされているすべてのチェックボックスを取得するために、このようにチェックします。

var checkCount = $("input[name='city[]']:checked").length;

if(checkCount == 0)
{
   alert("Atleast one checkbox should be checked.");
}
于 2013-04-23T05:49:03.707 に答える