我有这个旧代码,用于选择类.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>
答案 0 :(得分:3)
删除checked
属性后,无法再次添加。
您应该使用prop
代替attr
:
$('input.sselect').prop("checked", true); // Check
$('input.sselect').prop("checked", false); // Unheck