jQuery 复选框始终为 false

jQuery checkbox always false

首先我想说,我知道这个问题已经被问过很多次了,但我可以向你保证,我尝试了所有我能找到的答案,但都失败了。

所以首先我有一个 jQuery Datatable 看起来像这样(我正在使用 laravel 所以这就是为什么有这个 foreach):

<table>
    <thead>
        <tr>
            <th id="head-cbx"><input type="checkbox" name="example"></th>
            <th id="head-xcode">XCODE</th>
        <tr>
    </thead>
    <tbody>
    @foreach($xcodes as $xcode)
        <tr>
            <td id="head-cbx"><input type="checkbox" class="xcode-cbx" name="xcodes[]"></td>
            <td>{{ $xcode }}</td>
        <tr>
    @endforeach
    </tbody>
</table>

最明显的 objective 是有一个复选框,允许我选中/取消选中所有其他复选框。

对于 jQuery 部分,我尝试了以下解决方案:

$(document).ready(function(){
    var headcbx = $('#head-cbx');
    headcbx.change(function(){
    if (headcbx.is(':checked')) {
            //uncheck all
        } else {
            //check all
        }
    });
}

然后

$(document).ready(function(){
    var headcbx = $('#head-cbx');
    headcbx.change(function(){
    if ($(this).is(':checked')) {
            //uncheck all
        } else {
            //check all
        }
    });
}

然后

$(document).ready(function(){
    var headcbx = $('#head-cbx');
    headcbx.change(function(){
    if (this.is(':checked')) {
            //uncheck all
        } else {
            //check all
        }
    });
}

然后我改变了我的测试

if (this.is(':checked'))...

if(this.checked)

然后到

if(this.prop('checked)

当然,每次我尝试变体

this
headcbx
$(this)
$('#head-cbx')

之后我尝试使用

$(document).on('change', '#head-cbx', function(){...})

具有我上面列出的所有相同变体。

无论如何,我总是得到相同的结果:false。 所以我开始感到沮丧,我可以使用帮助,因为我想我在某处遗漏了一些明显的东西,但我似乎找不到它...

谢谢:)

您的选择器是错误的,因为 head-cbx 指的是 <TD> 元素而不是 checkbox 所以要么更改选择器

var headcbx = $('#head-cbx :checkbox');

注意:this.checked/$(this).is(':checked')/$(this).prop('checked) 会起作用

或者,修复 HTML

<th><input id="head-cbx" type="checkbox" name="example"></th>

问题在这里:

var headcbx = $('#head-cbx');

&

<td id="head-cbx">

您在事件侦听器中使用的 idtd,而不是复选框。所以将其更改为:

var headcbx = $('#head-cbx :checkbox');