`
15000346240
  • 浏览: 17138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jquery批量操作checkbox不生效等问题

阅读更多
jquery批量操作checkbox不生效等问题

平常页面元素简单的时候操作很简单,也不会遇到特殊问题,但是当页面结构复杂的时候,特别是与其他框架混合的时候就会出现意外情况,

<input type="checkbox" id="123">
选中复选框:

$("#123").attr("checked","checked");//或者$("#123").attr("checked",true);
取消复选框:


$("#123").attr("checked",false);//或者$("#123").removeAttr("checked");
但是如果想要批量操作一些复选框,而且不知道这些复选框的ID,而且这些复选框每个外面都会嵌套不同层数的DIV  LABEL  等其他页面标签元素,

比如最外层元素是<div id="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){
     //先进行全部取消操作
     //var cid = $(this).attr("id");
     //document.getElementById(cid).checked = false;
     el.checked = false;//上面注释的两行意思等同于当前这行
     //满足条件的话进行选中操作
     if(a>b){
         //var cid = $(this).attr("id");
         //document.getElementById(cid).checked = true;
         el.checked = true;
      }
});
虽然还是用到了部分jquery的语法,但是选中操作用的是原生JS的写法


document.getElementById(cid).checked = true;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics