为啥触发复选框时“已检查”属性不正确? [复制]

Posted

技术标签:

【中文标题】为啥触发复选框时“已检查”属性不正确? [复制]【英文标题】:Why is the "checked" attribute not true when checkbox is triggered? [duplicate]为什么触发复选框时“已检查”属性不正确? [复制] 【发布时间】:2013-03-23 23:51:57 【问题描述】:

在以下代码中使用 jQuery:

$("input").change(function(evt) 
  console.log("change event handler invoked", evt);
  console.log($("input").is(':checked'));
  console.log($("input").attr("checked"));
  console.log($("input").prop("checked"));
);

$("input").trigger("click");
$("input").trigger("click");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="the-input" type="checkbox">

is(':checked')prop("checked") 都可以显示为 true,但 `attr("checked") 将显示未定义。我以为他们应该是一样的? (即使我们手动点击复选框也是一样的效果)。

另外,如果我在 html 中设置 checked 以便默认选中复选框 (http://jsfiddle.net/UcGyM/1/ ),现在 attr("checked") 将打印出 checked 用于两个触发,所以它不能告诉它是否被检查 - 为什么? (同样奇怪的是两者都显示checked,但$("input").attr("checked", true);$("input").attr("checked", false);可以打开或关闭。)

一个相关的问题是,如果我们要坚持使用attr("checked"),那是否意味着在HTML中,它必须有checked属性:&lt;input type="checkbox" checked&gt;,如果是,它如何指定属性但是它默认为关闭? (因为 checked="false"checked=""checked="0" 默认不会取消选中它。

【问题讨论】:

This question 可能会有所帮助。 属性并不总是与属性保持一致,这就是为什么对 .attr/.prop 的更改如此重要和必要的原因。 大部分问题的答案都在这里api.jquery.com/prop 【参考方案1】:

不,它们不一样。 .attr 是 DOM 属性。如果元素是,则为checked

<input type=checkbox checked>

点击时改变的是属性

至于您的相关问题,checked 是一个布尔属性,因此无法指定一个元素在具有选中属性的同时不被检查。

我不知道你为什么要坚持使用attr 而the jQuery API itself says this is incorrect as of jQuery 1.6

【讨论】:

以上是关于为啥触发复选框时“已检查”属性不正确? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 jQuery 看不到已自动选中的复选框?

绑定到角度mat-checkbox的检查属性的方法被多次触发

在单击 jquery 时添加属性“已检查”

如何在加载了 JSON API 数据的 tableview 单元格中保存复选标记属性?

从Swift数组中的选定复选标记中删除字符串

UIControl 子类延迟响应