zoukankan      html  css  js  c++  java
  • jquery checkbox勾选/取消勾选只能操作一次的诡异问题

    复制代码
    复制代码
    <form>
            你爱好的运动是?<input type="checkbox" id="CheckedAll" />全选/全不选<br />
            <input type="checkbox" name="items" value="足球" />足球
            <input type="checkbox" name="items" value="篮球" />篮球
            <input type="checkbox" name="items" value="羽毛球" />羽毛球
            <input type="checkbox" name="items" value="乒乓球" />乒乓球
            <br />
            <input type="button" id="send" value="提 交" />
        </form>
    复制代码


    $("#CheckedAll").click(function () { if ($(this).is(":checked")) { $("[name=items]:checkbox").attr("checked", true); } else { $("[name=items]:checkbox").attr("checked", false); } });
    复制代码

    第一次执行,没问题,但第二次执行就有问题了,选择不了

    解决办法:把attr()换成prop()

     

    复制代码
     $("#CheckedAll").click(function () {
                    if ($(this).is(":checked")) {
                        $("[name=items]:checkbox").prop("checked", true);
                    } else {
                        $("[name=items]:checkbox").prop("checked", false);
                    }
                });
    复制代码

     

    PS:prop()和attr()区别:

    (来源:http://hxq0506.iteye.com/blog/1046334

    最近在iteye的新闻中看到jQuery已经更新到了1.6.1。和之前版本的最大变化是增加了.prop方法。但是.prop()方法和.attr()方法,单从字面上很难区分。在汉语中properties和attributes都有表示“属性”的意思。
    下面根据这篇博文(javascript:mctmp(0);),简要翻译了.prop()和.attr()的用法:

    1、从1.5.2升级到1.6.1

    通过介绍新方法.prop()以及.attr()方法的改变,jQuery1.6.1引起了一场关于attributes和properties之间有何区别和联系的激烈讨论。同时,1.6.1也解决了一些向后兼容性问题。当从1.5.2升级到1.6.1时,你不必修改任何attribute代码。

    下面是关于jQuery1.6和1.6.1中Attributes模块变化的描述,以及.attr()方法和.prop()方法的首选使用。然而,正如前面所述,jQuery1.6.1允许你使用.attr()方法就像以前它被使用在所有的情况中一样。

    2、发生了什么变化

    Attributes模块的变化是移除了attributes和properties之间模棱两可的东西,但是在jQuery社区中引起了一些混乱,因为在1.6之前的所有版本中都使用一个方法(.attr())来处理attributes和properties。但是老的.attr()方法有一些bug,很难维护。jQuery1.6.1对Attributes模块进行了更新,并且修复了几个bug。

    特别提到的是,boolean attributes,比如:checked,selected,readonly和disabled在1.6.1中和1.6之前的处理相同。这意味着下面的代码:

    1. $(“:checkbox”).attr(“checked”, true);  
    2. $(“option”).attr(“selected”, true);  
    3. $(“input”).attr(“readonly”, true);  
    4. $(“input”).attr(“disabled”, true);  

     甚至是这样的代码:

    1. if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */ }  

    在1.6.1中没有必要为了保持之前期望的运行结果而发生任何改变。

     
     

    3、首选用法的概述

     

    .prop()方法应该被用来处理boolean attributes/properties以及在html(比如:window.location)中不存在的properties。其他所有的attributes(在html中你看到的那些)可以而且应该继续使用.attr()方法来进行操作。

     

    上面的概述已经描述的够清楚了,我也没有必要再总结了。

     
  • 相关阅读:
    文件读写,尝试filestream和streamreader,streamwriter
    打印控件ScriptX,手动安装ScriptX插件说明 只兼容IE
    JS 循环获取Repeater 中Checkbox1被选中的值
    页面传值出现乱码问题 window.showModalDialog()
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    js 获取时间给时间控件赋值
    css 固定在窗口底端
    后台转换JSON格式。ToJson
    JS 匿名函数的使用2
    JS 匿名函数的使用1
  • 原文地址:https://www.cnblogs.com/wenghaowen/p/4174120.html
Copyright © 2011-2022 走看看