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

本文探讨了在Bootstrap模态框中使用jQuery处理checkbox选中状态的问题。详细解释了为何使用.attr("checked", true)无法正确保存选中状态,而.prop("checked", true)能解决问题的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做项目的过程中碰到了这样的一个问题:在使用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>好的,我现在需要回答用户关于HTML中input标签的checked属性的作用的问题。首先,我需要回顾一下checked属性的基本用途。根据提供的引用内容,checked属性用于设置复框的初始中状态。例如,当在HTML中<input type="checkbox" checked="checked">时,页面加载时该复框会被默认中。 接下来,我需要确认用户提到的checked="checked"的正确性。根据引用[2]和[4],checked属性可以简为单独的checked,但两种法都是有效的。过,使用checked="checked"更符合XHTML的标准,而简形式则是HTML5中的常见做法。 然后,我需要解释属性与属性之间的区别。根据引用[5],使用jQuery时,应该用.prop().attr()来操作checked属性,因为checked是一个布尔属性,是普通的HTML属性。这涉及到DOM属性与HTML属性的区别,正确的方法是通过prop来设置,因为attr可能在某些情况下无效,特别是在动态改变中状态时。 此外,用户可能想知道如何通过JavaScript来获取或设置checked属性。引用[4]中的例子展示了如何使用document.getElementById来设置checked为false,这说明直接操作DOM元素的checked属性是有效的方法。同时,引用[3]中的代码示例也说明了在JavaScript中判断checked状态的方法,即通过this.checked来判断是否被中。 还需要注意常见的问题,比如即使设置了checked属性,但页面上没有显示勾选的情况。引用[3]提到了这种情况,可能的原因包括JavaScript代码覆盖了初始状态,或者属性被错误地设置。这时候需要检查是否有后续的脚本修改了checked属性,或者是否正确使用了prop方法来设置。 最后,我需要整理这些信息,以清晰的结构呈现给用户,包括基本作用、属性设置方法、动态操作以及常见问题解决。同时,生成相关问题来帮助用户进一步理解相关知识点,比如如何用JavaScript操作checked属性,或同方法的区别等。</think>HTML中`<input type="checkbox">`的`checked`属性用于控制复框的默认中状态。当添加该属性时,页面加载时复框会显示中状态。 ### 一、基本作用 1. **初始化中状态** 在HTML标签中添加`checked="checked"`或简`checked`,页面加载时会自动勾选该复框: ```html <input type="checkbox" checked="checked"> 默认中 <input type="checkbox" checked> <!-- HTML5简 --> ``` 2. **与普通属性的区别** `checked`是布尔属性,其存在即表示`true`。若需要动态修改,应通过JavaScript的DOM属性`element.checked`操作,而非HTML属性[^5]。 ### 二、属性设置方法 | 方法 | 说明 | 示例代码 | |---------------------|-------------------------------|----------------------------------------| | HTML静态设置 | 初始化时生效 | `<input type="checkbox" checked>` | | JavaScript动态设置 | 通过DOM属性操作 | `document.getElementById("cb").checked = true` | | jQuery动态设置 | 使用`.prop()`方法 | `$("#cb").prop("checked", true)`[^5] | ### 三、常见问题解决 1. **设置了`checked`但未显示勾选** - 检查是否有其他JavaScript代码覆盖了初始状态[^3] - 确保使用`.prop()`而非`.attr()`修改属性 2. **状态判断逻辑** ```javascript if(document.getElementById("cb").checked) { // 执行中时的逻辑 } ``` ### 四、关键区别 ```html <!-- HTML属性(初始值) --> <input type="checkbox" checked> <script> // DOM属性(当前值) document.querySelector("input").checked = false; // 取消中 </script> ``` [^1]: 通过判断`checked`属性实现交互逻辑 : 正确使用`.prop()`方法操作布尔属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值