Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery复选框选中/取消选中_Jquery_Checkbox - Fatal编程技术网

jQuery复选框选中/取消选中

jQuery复选框选中/取消选中,jquery,checkbox,Jquery,Checkbox,选择/取消选择触发我的函数的元素中的复选框的正确方法是什么 这是我的密码: <table id="news_list"> <tr> <td><input type="checkbox" name="news[1]" /></td> <td>TEXT</td> </tr></table> $("#news_list tr").click(function() { v

选择/取消选择触发我的函数的元素中的复选框的正确方法是什么

这是我的密码:

<table id="news_list">
<tr>
    <td><input type="checkbox" name="news[1]" /></td>
    <td>TEXT</td>
</tr></table>

$("#news_list tr").click(function() {
    var ele = $(this).find('input');
    if(ele.is(':checked')){
        ele.removeAttr('checked');
        $(this).removeClass('admin_checked');
    }else{
        ele.attr('checked', 'checked');
        $(this).addClass('admin_checked');
    }
});

正文
$(“#新闻列表tr”)。单击(函数(){
var ele=$(this.find('input');
如果(元素为(':选中')){
ele.removeAttr(“选中”);
$(this.removeClass('admin_checked');
}否则{
元素属性(“选中”、“选中”);
$(this.addClass('admin_checked');
}
});
问题是我只能选中和取消选中每个框一次。在我勾选和取消勾选之后,有时它仍然添加/删除类,但不再勾选复选框(即使我单击复选框,而不是表行)

我尝试使用.bind('click')触发器,但结果相同

任何解决方案?

使用prop()而不是attr()来设置选中的
的值。也可以在find方法中使用
:复选框
,而不是
输入
,并且要具体

从jQuery1.6开始,.attr()方法返回未定义的属性 这还没有确定。检索和更改DOM属性,如 表单元素的选中、选中或禁用状态使用 .prop()方法

改为使用
.prop()
,如果我们使用您的代码,则进行如下比较:

看看这个例子:

变化:

  • 输入
    更改为
    :复选框
  • 比较
    选中复选框的长度

  • 看这些答案,我不太确定它们是否能为您的尝试提供解决方案。我不明白为什么基本上禁用复选框是有意义的,这就是那些给定答案所做的(因为当你点击复选框时,它变成选中状态,这意味着if语句将立即取消选中它…这意味着你永远不能通过点击实际的复选框来实际选中复选框…对吗?)。这就是你想要做的吗?:@Joonas谢谢,这正是我需要的!Jai的回答对Single row有效,对multipleGood无效。不过有一件事。如果我的JSFIDLE正是您所需要的,那么我不确定Jai的答案是否适用于一行。它不允许您通过单击复选框来选中复选框,这是由于我上面解释的if语句造成的。所以我想你错过了那部分,或者。。。我仍然不知道您想要什么:)因为:checkbox是jQuery扩展,而不是CSS规范的一部分,使用:checkbox的查询无法利用本机DOM querySelectorAll()方法提供的性能提升。为了在现代浏览器中获得更好的性能,请改用[type=“checkbox”]。实际上这是正确的解决方案。接受的答案有一些问题。谢谢你的解决方案。
    prop
    对我不起作用,但是
    removeAttr
    attr
    使用jQuery 1.9.1。谢谢,prop为我解决了一个不同的问题,所以发现这条信息非常有用。@NickLewis欢迎你。如果这不起作用,确保编辑@PeterMortensen时元素之间的ID不重复
    $("#news_list tr").click(function() {
        var ele = $(this).find('input');
        if(ele.is(':checked')){
            ele.prop('checked', false);
            $(this).removeClass('admin_checked');
        }else{
            ele.prop('checked', true);
            $(this).addClass('admin_checked');
        }
    });
    
      $("#news_list tr").click(function () {
        var ele = $(this).find(':checkbox');
        if ($(':checked').length) {
          ele.prop('checked', false);
          $(this).removeClass('admin_checked');
        } else {
          ele.prop('checked', true);
          $(this).addClass('admin_checked');
        }
     });
    
     $('mainCheckBox').click(function(){
        if($(this).prop('checked')){
            $('Id or Class of checkbox').prop('checked', true);
        }else{
            $('Id or Class of checkbox').prop('checked', false);
        }
    });