使用jQuery切换复选框只能工作两次

时间:2015-05-28 09:27:19

标签: jquery html checkbox

我有这个旧代码,用于选择类.sselect的所有复选框,然后使用相同的按钮#selectall再次取消选中所有复选框

代码工作两次,选中所有复选框,然后再次取消选择它们,但不再是。有什么建议吗?

$(function() {  
    var tog = true;
    $('a#selectall').click(function() {
        if (tog) {
            $('input.sselect').attr("checked","checked");
            $(this).html('<i class="fa fa-check-circle"></i> Unselect all');
        }
        else {
            $('input.sselect').removeAttr('checked'); 
            $(this).html('<i class="fa fa-check"></i> Select all');
        }
        tog = !tog;
    });
}); 

更新 使用prop()解决了这个问题,但没有解释为什么attr()只能工作一次但不能解释两次。我在jQuery文档中读到了:

  

从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。要检索和更改DOM属性(如表单元素的已选中,已选择或已禁用状态),请使用.prop()方法。

但为什么上面的代码实际上无法设置属性?它是第一次工作,为什么它不能在下一个工作?

这个答案对主题提出了一些看法:Setting "checked" for a checkbox with jQuery? - 但我发现的问题并不是表单已重置,而是在使用removeAttr()删除后无法读取该属性。< / p>

1 个答案:

答案 0 :(得分:3)

删除checked属性后,无法再次添加。

您应该使用prop代替attr

$('input.sselect').prop("checked", true); // Check


$('input.sselect').prop("checked", false); // Unheck