最近做一个项目,我把自己模块做好调试了已经没问题了。
但当我把我的代码放到公司框架里发现点击复选框根本不会触发事件。
仔细研究了一下原来是checkbox 的check属性惹得祸。
1. 如果在页面定义如下复选框<input type="checkbox" />,只要写了checkbox 属性不管为什么值, 在页面复选框的是选中状态。
<input type="checkbox" checked="false"/> ,<input type="checkbox" checked="true"/> ,<input type="checkbox" checked="checked"/> 或者直接写上<input type="checkbox" checked>
得到的属性值都为checked。
html 代码为:
<div id="hostAndAppToChooseDivAll">
<label id="labChooseAll">
<input type="checkbox" name="CheckboxGroup" value=""id="chbChooseAll" checked />
所有</label>
<%if(entityDao.isHasCategorizedEntity()){ %>checked
<input type="button" title="" value="取消分组显示" id="btncancelGroup" />
<%} %>
</div>
js代码为:
$(document).ready(function() {
alert("chbChooseAll:checked:-"+$('#chbChooseAll').attr('checked'));
$("[type='checkbox']").attr("checked",false);
});
效果为:
![](http://hi.csdn.net/attachment/201108/28/0_1314511966jgQ3.gif)
看到没打印结果为checked 不管你设 checked 值为“false” “checked”。
所以判断选中就用"checked"==jqueryObj.attr("checked")和0==jqueryObj.attr("checked").length。最近经理把jquery 改成版本 1.6 了。1.在jquery 1.6 下,可以用 .is(":checked") 判断是否选中。2.jquery 目前在处理 $(this).attr("checked",true); 有时会出现问题。
如下图:
bug 描述(firefox 不正常,IE 正常): 1.当点击第一次正常。 2.如果多次点的话出现bug,如果上图 主机: hostMan 应用:hostMan 选中 所有那里的checkbox 应该选中。
调试了很久也没解决。
bug 解决办法:
发现原来是$(this).attr("checked",true); 的问题。改成直接用DOM操作就可以了this.checked = true;
改后效果如下正常了。
总结:大胆尝试。