jquery批量操作checkbox不生效等问题
jquery批量操作checkbox不生效等问题
平常页面元素简单的时候操作很简单,也不会遇到特殊问题,但是当页面结构复杂的时候,特别是与其他框架混合的时候就会出现意外情况,
<inputtype="checkbox"id="123">
选中复选框:
$("#123").attr("checked","checked");//或者$("#123").attr("checked",true);
取消复选框:
$("#123").attr("checked",false);//或者$("#123").removeAttr("checked");
但是如果想要批量操作一些复选框,而且不知道这些复选框的ID,而且这些复选框每个外面都会嵌套不同层数的DIVLABEL等其他页面标签元素,
比如最外层元素是<divid="aa">......
我们通常的写法是
$('#aa').find("input").each(function(){
$(this).attr("checked","checked");//或者$(this).attr("checked",true);
});
上面的写法是没问题的,但是有时候需要在你批量选中一部分复选框之前要先全部取消选中,这个时候会这样写
$('#aa').find("input").each(function(){
$(this).attr("checked",false);//removeAttr
if(a>b){
$(this).attr("checked","checked");//或者$(this).attr("checked",true);
}
});
但是我这样写出现的问题,不管怎么试都是取消选中生效了,但是后面的批量选中一部分确没生效,就是if(a>b)里面的代码没生效,但是调试时候发现页面元素是有(checked="checked")的,但是页面上就是没有打钩,最后选择用原生JS来操作
$('#aa').find("input").each(function(i,el){
//先进行全部取消操作
//varcid=$(this).attr("id");
//document.getElementById(cid).checked=false;
el.checked=false;//上面注释的两行意思等同于当前这行
//满足条件的话进行选中操作
if(a>b){
//varcid=$(this).attr("id");
//document.getElementById(cid).checked=true;
el.checked=true;
}
});
虽然还是用到了部分jquery的语法,但是选中操作用的是原生JS的写法
document.getElementById(cid).checked=true;