通过checkbox的属性理解jquery获取attribute与property
2016-01-21 15:45
661 查看
产生问题的原因如下:
jquery无法设置checkbox选中即没有变成选中状态
设置以后checkbox并没有变成选中状态,用chrome调试看了一下,checkbox中确实有checked属性,而且,值为checked,但是页面显示仍然为未选中状态
attributes和properties之间的差异在特定情况下是很重要。jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值。
例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 应使用.prop()方法进行取值或赋值。 在jQuery1.6之前,这些属性使用.attr()方法取得,但是这并不是元素的attr属性。他们没有相应的属性(attributes),只有特性(property)。
例如,考虑一个DOM元素的HTML标记中定义的<input type="checkbox" checked="checked" /> ,并假设它是一个JavaScript变量命名的elem :
elem.checked true (Boolean) 将改变复选框的状态
$(elem).prop("checked") true (Boolean) 将改变复选框的状态
elem.getAttribute("checked") "checked" (String) 不会改变的复选框的初始状态;
$(elem).attr("checked") (1.6) "checked" (String) 不会改变的复选框的初始状态;
$(elem).attr("checked") (1.6.1+) "checked" (String) 将改变复选框的状态
$(elem).attr("checked") (pre-1.6) true (Boolean) 将改变复选框的状态
根据W3C的表单规范 ,在checked属性是一个布尔属性,这意味着只要该 attribute 存在,即使它没有值,或是一个空字符串,该属性对应的 property 就是 true。以下推荐的是兼容浏览器方式,判断 checkbox 元素的 checked 属性是否为"真" 的方法:
来改变其值。推荐使用上述方法之一,来取得 checked 的值。
完整代码如下:
jquery无法设置checkbox选中即没有变成选中状态
设置以后checkbox并没有变成选中状态,用chrome调试看了一下,checkbox中确实有checked属性,而且,值为checked,但是页面显示仍然为未选中状态
$("input").prop("checked",true);
attributes和properties之间的差异在特定情况下是很重要。jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值。
例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 应使用.prop()方法进行取值或赋值。 在jQuery1.6之前,这些属性使用.attr()方法取得,但是这并不是元素的attr属性。他们没有相应的属性(attributes),只有特性(property)。
例如,考虑一个DOM元素的HTML标记中定义的<input type="checkbox" checked="checked" /> ,并假设它是一个JavaScript变量命名的elem :
elem.checked true (Boolean) 将改变复选框的状态
$(elem).prop("checked") true (Boolean) 将改变复选框的状态
elem.getAttribute("checked") "checked" (String) 不会改变的复选框的初始状态;
$(elem).attr("checked") (1.6) "checked" (String) 不会改变的复选框的初始状态;
$(elem).attr("checked") (1.6.1+) "checked" (String) 将改变复选框的状态
$(elem).attr("checked") (pre-1.6) true (Boolean) 将改变复选框的状态
根据W3C的表单规范 ,在checked属性是一个布尔属性,这意味着只要该 attribute 存在,即使它没有值,或是一个空字符串,该属性对应的 property 就是 true。以下推荐的是兼容浏览器方式,判断 checkbox 元素的 checked 属性是否为"真" 的方法:
if ( elem.checked ) if ( $(elem).prop("checked") ) if ( $(elem).is(":checked") )如果你使用jQuery 1.6 ,代码if ( $(elem).attr("checked") ),将获得一个属性(attribute) ,它不改变该复选框被选中和选中。它只是用来存储默认或选中属性的初始值。为了保持向后兼容,.attr() 方法从 jQuery 1.6.1+ 开始除了返回属性值外,还会更新 property 属性,因此 boolean attribute(布尔属性)不需要通过 .prop()
来改变其值。推荐使用上述方法之一,来取得 checked 的值。
完整代码如下:
<!DOCTYPE html> <html lang="en"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta charset="UTF-8"> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#btnCheckAll").on("click", function () { if ($('#btnCheckAll').is(':checked')) { $("[name = chkItem]:checkbox").prop("checked", true); } else { $("[name = chkItem]:checkbox").prop("checked", false); } }); }); </script> </head> <body> <div><input name="chkItem" type="checkbox" value="今日话题"/>今日话题 <input name="chkItem" type="checkbox" value="视觉焦点"/>视觉焦点 <input name="chkItem" type="checkbox" value="财经"/>财经 <input name="chkItem" type="checkbox" value="汽车"/>汽车 <input name="chkItem" type="checkbox" value="科技"/>科技 <input name="chkItem" type="checkbox" value="房产"/>房产 <input name="chkItem" type="checkbox" value="旅游"/>旅游 </div> <div>全选/取消全选<input id="btnCheckAll" type="checkbox"/></div> </body> </html>
相关文章推荐
- JQuery学习笔记(二):jQuery 效果
- JQuery学习笔记(一):basic kno 4000 wledge
- JQuery中如何click中传递参数
- jQuery validate插件submitHandler提交导致死循环解决方法
- jQuery.fn和jQuery.prototype区别介绍 (赞)
- jQuery prototype冲突的2种解决方法(附demo示例下载)
- jQuery Mobile学习
- JQuery - 根据节点获取对应的id,可用于留言板
- jQuery 6位密码框
- jquery mobile开发常见问题分析
- 关于JQuery Validate的那点事
- Jquery解决下拉框数据动态获取
- JQuery上传插件Uploadify使用详解
- Jquery 时间格式化
- DJANGO结合jQuery cxSelect 作二级菜单过滤
- jquery easyui datagrid纯js导出到excel
- jQuery选择器大全
- jquery 插件封装模板
- jQuery Ajax 实例 全解析
- jquery ui 学习随笔 验证插件