doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:8661回复:0

[javascript]jquery attr()改变checkbox的checked无效的问题,详解

楼主#
更多 发布于:2017-12-27 19:06
问题描述:
     如下图,做了一个员式列表,然后点击编辑的时候,可以对于员工信息进行编辑。在编辑前,首先要做的就是绑定当前的数据,其中,如果员工为男性别就选中男,如下当前员工为女就选中女.



      

图片:1.png

图片:2.png




代码实现如下:

      使用了jquery中的attr 的方法, dom 原生的setAttributer的方法都不行。在反复切换的过程中,不能够正确的选中,第一次的选中还是可以的。可是多几次切换就不正确的。


 if(sex=="男"){
        // $("#sexM").attr("checked",true);
        // $("#sex).removeAttr("checked");

        //$("#sexW").attr("checked",false);

        $("#sexM")[0].setAttribute('checked',true);
        $("#sexW")[0].setAttribute('checked',false);  //jquery attr
      
    }
    else {
        $("#sexW")[0].setAttribute('checked',true);
        $("#sexM")[0].setAttribute('checked',false);

        // $("#sexW").attr("checked",true);
        // $("#sexM").removeAttr("checked");

        // $("input[type='sexRadio']").eq(1).attr("checked","checked");
        // $("input[type='sexRadio']").eq(0).attr("checked",false);
    }

但是,通过下面的方法,却可以正确的实现

 if(sex=="男"){
         $("#sexW")[0].checked=false;
         $("#sexM")[0].checked=true;
    }
    else {
         $("#sexM")[0].checked=false;
         $("#sexW")[0].checked=true;
    }

 在使用以上的方法时,就可以正确的实现. 为什么呢?

    是jquery 的问题嘛,可以第一种方式里,我们也用了DOM中提供的方法:

    $("#sexW")[0].setAttribute('checked',true);
    $("#sexM")[0].setAttribute('checked',false);

发现,即使是原生的方法通过setAttribute,也是有问题了。

   最后,经过查询发现了attribute vs property 的区别.

  • property是DOM中的属性,是JavaScript里的对象;
  • attribute是HTML标签上的特性,它的值只能够是字符串;

    setAttribute 是用来设置attribute的.
  $("#sexM")[0].checked 的这种方式是用来设置property的.

    那checked到底是attribute属性还是property属性呢?


    如下图,我们可以看出checked属性attribute属性,但是,我们在操作时,会把它变成peoperty属性来操作。

    

图片:6.png



   所以,在使用jquery 来操作property属性时,在jquery1.6+ 以上的版本,jquery专门提供了一个方法.prop来进行property属性的设置。

经测试,使用以下的代码,也可以完美的解决上面的问题。

 if(sex=="男"){
        //$("#sexW").prop("checked",false);
        //$("#sexM").prop("checked",true);
    }
    else {  
        // $("#sexM").prop('checked');
        // $("#sexW").attr("checked",true);
    }

可参考如下图的官方说明:

图片:4.png


知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号