jquery attr prop checkbox已有checked=checked但不显示勾选问题

转自:http://www.iteye.com/topic/1141320

 

 

 

最近在做项目的过程中碰到了这样的一个问题:在使用bootstrap模态框的过程中,在模态框中有一个checkbox标签,一开始是为选中的,当点击触发模态框按钮,选中chcekbox时,会显示勾选,这个时候将选中的状态缓存起来,然后点击模态框中的关闭按钮,再次点击触发模态框按钮弹出模态框,这个时候问题出现了:

    checkbox标签已有checked=checked但是不显示勾选,效果如图: 

网上也查过有解决方案,就是将 $("...").attr("checked", true)改为$("...").prop("checked", true),问题解决,但是,问题是解决了,那么原因是出现在哪里呢? 首先来了解下 jquey中的 attr()函数和prop()函数,attr()是处理 attribute的值的,而prop()是处理 property 的值的 ,jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值,那么归根结底,就是在处理 attribute 和 property。

      很多attribute节点有一个相应的property属性,因而attribute和property很容易被混淆在一起,如某个div元素中的id和class既是attribute也有property,不管哪种方式都可以访问和修改,但是对于自定义的attribute节点,或者自定义property,两者就没有关系了(但是在IE6-7中,两者还是一样的,好奇葩的,但愿我们都能早日抛弃IE8以下的),需要注意的是:

      对于checked特性(attribute)不是对应它checked属性(property),attribute实际对应的是defaultChecked属性,而且仅用于设置复选框最初的值,checked的attribute不会因为复选框的状态而改变,而checked的property会因为复选框的状态而改变,所以在.attr()函数中,就算设置成了.attr("checked", true),也只是用来存储默认或者选中属性的默认值,却并不改变该复选框被选中和选中,这就是为什么 checkbox标签已有checked=checked但是不显示勾选 的原因所在。

<think>好的,用户想知道如何使用jQuery将复设置中状态。我需要回忆一下相关的jQuery方法。 首先,我记得jQuery设置属性通常用attr()方法。比如,设置checked属性为"checked",应该像这样:$('selector').attr('checked', 'checked')。过,用户提供的引用[1]中提到,使用attr()方法可以获取或设置属性。但可能在某些情况下,比如动态操作时,prop()方法更可靠,比如在jQuery 1.6之后,推荐用prop()来处理布尔属性,如checked、selected等。过用户给的例子中引用[1]和[2]都用了attr(),所以可能需要说明两种方法。 另外,用户提供的引用[2]中有一个例子,使用attr('checked','checked')来设置中。这说明在jQuery UI的dialog打开事件中,他们用这种方式设置。所以用户可能需要兼容旧版本的情况,或者在某些情况下attr()仍然有效。 然后,引用[3]中的表单提交处理,可能涉及到动态生成的复,但这里的问题主要是设置checked状态,所以暂时需要处理动态元素的问题。引用[4]是关于移除disabled属性,和设置checked无关,但可能说明用户对jQuery操作属性有基本了解。 现在需要确认的是,正确的方法是什么。根据jQuery的最佳实践,对于布尔属性如checked,应该使用prop()方法,因为checked是一个属性/特性,而属性值。例如,$('#checkbox').prop('checked', true)会更直接有效,特别是在处理跨浏览器兼容性问题时。而attr()方法可能在旧版本的jQuery中有效,但在某些情况下可能无法正确反映元素的状态变化,特别是在动态操作时。 因此,回答中应该提到两种方法,但推荐使用prop()。需要比较两者的区别,并给出示例代码。比如,设置中可以用.prop('checked', true),取消中则用.prop('checked', false)。而使用attr()的话,则是设置属性值为'checked',或者移除该属性。 同时,用户的问题可能涉及到如何根据条件来设置的状态,比如在对话打开时根据某个值来设置。例如,在引用[2]中的例子,他们在对话打开事件中检查某个隐藏值,然后设置checked属性。 总结,回答的结构应该是:首先介绍两种方法(attrprop),解释它们的区别,推荐使用prop(),并提供示例代码。同时,可以提到在特定情况下(如动态创建的元素或表单处理)需要注意的地方,比如引用[3]中的处理方式可能需要在表单提交时处理隐藏的复,但用户的问题主要是设置checked状态,因此重点在propattr使用。 最后,生成相关问题,比如如何获取复的状态,或者如何处理多个复,以及可能遇到的常见问题,比如为什么用attr有时生效,这可以引导用户进一步了解propattr的区别。</think>要使用jQuery将复设置中状态,可以通过以下两种方法实现: ### 方法一:使用`prop()`方法(推荐) ```javascript // 设置中状态 $('#checkboxID').prop('checked', true); // 取消中状态 $('#checkboxID').prop('checked', false); ``` `prop()`方法直接操作DOM元素的属性,能准确反映复的实际状态,适用于所有jQuery版本(1.6+)[^1]。 ### 方法二:使用`attr()`方法 ```javascript // 设置中状态 $('#checkboxID').attr('checked', 'checked'); // 取消中状态 $('#checkboxID').removeAttr('checked'); ``` `attr()`方法修改HTML属性,但在动态交互中可能出现状态同步的情况,适合静态页面操作[^2]。 ### 完整示例 ```html <input type="checkbox" id="agree"> <button onclick="$('#agree').prop('checked', true)">勾选协议</button> ``` ### 常见场景 1. **表单初始化时设置默认值** 在对话打开事件中设置: ```javascript $("#fModal").dialog({ open: function() { if(shouldCheck) { $(".row-form input[type='checkbox']").prop('checked', true); } } }); ``` 2. **动态表格操作** 处理表单提交时同步所有复状态: ```javascript $('#form').submit(function() { $('input[type="checkbox"]').each(function() { if(!$.contains(document, this) && this.checked) { $(this).clone().attr('type', 'hidden').appendTo(this.form); } }); }); ``` ### 注意事项 - 使用`prop()`时传递布尔值,而`attr()`需要字符串参数 - 对于动态生成的元素,需确保DOM加载完成后执行操作 - 批量操作建议使用择器,如`$('.check-group').prop('checked', true)`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值