jquery -- checkbox选中无选中状态

最近在工作中使用jquery操作checkbox,使用下面方法进行全选、反选:

var ischecked=allCheckObj.is(‘:checked‘);
ischecked?checksObj.attr(‘checked‘,true):checksObj.attr(‘checked‘,false); 

调试时在ie没有问题,考虑到兼容性,试试了firefox,遇到了问题。于是乎,做了如下实验:
复选框绑定了click事件,点一次选中,再点击取消选中,依次类推。这个功能在ie中没问题,但是在firefox中测试的时候,前两次都没有问题,可以正常显示选中和取消,但当再去选中的时候,复选框的属性checkbox值变为"checked",没问题,但是复选框却不在显示选中状态,明明属性值改了,但是却不显示勾选,太诡异了。代码修改了却得不到正确的显示状态,纠结了很久,找不到原因。

原因:

ttributes和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 的值。

时间: 2024-08-12 03:44:43

jquery -- checkbox选中无选中状态的相关文章

jquery checkbox radio 标签 选中的3种方法

张映 发表于 2013-07-16 分类目录: js/jquery jquery 很灵活,checkbox radio标签选中的方法有很多,在这儿就例举三个常用的方法. 一,测试html 查看复制打印? <div style="margin-top:150px;"> <input type='checkbox' name='test[]' class='checkbox' value='checkbox1'>checkbox1 <input type='c

jquery checkbox点击选中,再点击取消选中

if(n==1){ if($("#abs1").is(':checked')){ $("#abs1").prop("checked",false); }else{ $("#abs1").prop("checked",true); show("abs1"); }

jquery checkbox 复选框多次点击判断选中状态,以及全选/取消的代码示例

2015年12月21日 10:52:51 星期一 目标, 点击当前的checbox, 判断点击后当前checkbox是否是选中状态. html: <input type="checkbox" onclick="contracts_checkall()" id="contracts_checkall"> 全选 js: 1 var checkall = $("#contracts_checkall").attr('ch

jquery checkbox的相关操作——全选、反选、获得所有选中的checkbox

jquery checkbox的相关操作——全选.反选.获得所有选中的checkbox 1.全选 $("#btn1").click(function(){ $("input[name='checkbox']").attr("checked","true"); }) 2.取消全选(全不选) $("#btn2").click(function(){ $("input[name='checkbox']&

Jquery checkbox选中问题

checkbox中有.checked的写法,判断当前是否是选中状态,不过这种是针对[object HTMLInputElement]这种类型的,而对于[object Object]这种类型是不能使用的 $("#checkall").checked会出现undefined $("#checkall").click(function () { if ($("#checkall").attr("checked")) {//jquer

jQuery 判断checkbox是否被选中 4种方法

下午写JS验证,有一个需求需要判断 checkbox是否被选择,查阅相关资料后,总结以下4种方法,分享给大家. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery 判断checkbox是否被选中 4种方法</title> <script src="jquery-1.8.3.min

jquery 获取页面所有选中checkbox的值

<script type="text/javascript"> //type 是用于判断类型的,与主题无关 function doAll(type) { var ids = ''; //获取所有选中的值,将其用逗号隔开 $('input[type="checkbox"]:checked').each(function(index,value) { if($(value).val() != 'on') { ids += $(this).val() + ',

Jquery判断checkbox是否被选中

判断checkbox是否被选中方法一:if ($("#checkbox-id")get(0).checked) { // do something}选中:true没选:false $("#formal").get(0).checkedtrue$("#formal").get(0).checkedfalse 方法二:if($('#checkbox-id').is(':checked')) { // do something}选中:true没选:fa

刷新的时候jquery获取checkbox是否为选中和设置选中

$(document).ready(function(){ $('.uninstall_list_checkbox').click(function(){ if($(this).parent('.uninstall_list').children('input').attr("checked")==true){ //判断是否选中 $(this).parent('.uninstall_list').children('input').attr('checked',false); //设置