博主在折腾 checkbox 的全选问题时,遇到了一个问题:

F12 查看,明明 checked="checked" 属性已经存在,但是复选框就是不打钩。

博主使用的是 jquery-2.1.3,因为完全不打算支持 IE 9 以下的浏览器,所以果断换成 2.x 的版本。

 

$('.check-all').click(function () { $(this).parent().find("input[type='checkbox']").attr('checked', $(this).is(':checked')); });

博主出现的情况是:

刷新页面后只点 check-all 复选框时,其他复选框能选上,再点一下 check-all 复选框,其他复选框全部取消,之前一切正常,但是第三次点击 check-all 复选框时,其他复选框带上 checked="checked" 属性,但是不打钩;

刷新页面后先点其他复选框,再点 check-all 复选框,除了第一个点击的复选框外其他复选框能选上,再点一下 check-all 复选框,之前选上的复选框全部取消,第三下点击 check-all 复选框依旧出现其他复选框带上 checked="checked" 属性,但是不打钩的情况。

 

博主感到非常困扰,难道以前学的 jquery 都忘光了?之后去翻 jquery 的文档,发现需要用 .prop 代替 .attr,把 code 变成下面内容

$('.check-all').click(function () { $(this).parent().find("input[type='checkbox']").prop('checked', $(this).is(':checked')); });

之后发现一切正常了。

 

jquery 文档一句:The checked attribute value does not change with the state of the checkbox, while the checked property does.


原创文章,转载请以链接形式注明出处:https://blog.ttionya.com/article-937.html