19

各行にチェックボックスがある HTML テーブルがあります。
テーブルをループして、チェックされているチェックボックスがあるかどうかを確認したい。
以下は機能しません。

$("#save").click( function() {
    $('#mytable tr').each(function (i, row) {
        var $actualrow = $(row);
        checkbox = $actualrow.find('input:checked');
        console.log($checkbox);
});

これにより、コンソールに次のように出力されます。

[prevObject: jQuery.fn.jQuery.init[1], context: tr, selector: "input:checked", constructor: function, init: function…]

チェックボックスがオンになっているかどうかに関係なく、行ごとに。


同じ問題を次のように 更新します。

$('#mytable tr').each(function (i, row) {                                                                                                 
   var $actualrow = $(row);
    $checkbox = $actualrow.find(':checkbox:checked');
    console.log($checkbox);  
});
4

3 に答える 3

62

代わりにこれを使用してください:

$('#save').click(function () {
    $('#mytable').find('input[type="checkbox"]:checked') //...
});

セレクターが何をするか説明しましょう: これはtype 属性が等しいinput[type="checkbox"]それぞれに一致することを意味します その後:チェックされたすべてのチェックボックスに一致します。<input />typecheckbox:checked

これらのチェックボックスを次のようにループできます。

$('#save').click(function () {
    $('#mytable').find('input[type="checkbox"]:checked').each(function () {
       //this is the current checkbox
    });
});

これはJSFiddleのデモです。


そして、ここにあなたの問題を正確に解決するデモがありますhttp://jsfiddle.net/DuE8K/1/

$('#save').click(function () {
    $('#mytable').find('tr').each(function () {
        var row = $(this);
        if (row.find('input[type="checkbox"]').is(':checked') &&
            row.find('textarea').val().length <= 0) {
            alert('You must fill the text area!');
        }
    });
});
于 2013-08-20T09:53:26.657 に答える
2

使用.filter(':has(:checkbox:checked)'すなわち:

$('#mytable tr').filter(':has(:checkbox:checked)').each(function() {
 $('#out').append(this.id);
});
于 2013-08-20T09:55:06.760 に答える