关于javascript:当复选框被触发时,为什么“checked”属性不正确?

Why is the “checked” attribute not true when checkbox is triggered?

本问题已经有最佳答案,请猛点这里访问。

在以下代码中,使用jquery:

1
2
3
4
5
6
7
8
9
$("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");
1
2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
<input id="the-input" type="checkbox">

is(':checked')prop("checked")都可以显示为真,但"attr"("选中")将显示为未定义。我以为他们是一样的?(即使我们手动单击复选框,也会产生相同的效果)。

另外,如果我将checked设置为HTML格式,以便默认选中复选框(http://jsfiddle.net/ucgym/1/),那么attr("checked")将打印出checked用于两种触发,因此它将无法判断是否选中——为什么?(同样奇怪的是,两者都显示checked,但$("input").attr("checked", true);$("input").attr("checked", false);可以打开或关闭。)

一个相关的问题是,如果我们坚持使用attr("checked"),在HTML中这是否意味着它必须具有checked属性:,如果是,它如何指定属性,但默认为关闭?(因为checked="false"checked=""checked="0"不会因违约而使其不受检查。


不,它们不一样。.attr是dom属性。如果元素

1
<input type=checkbox checked>

单击时更改的属性。

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

我不知道为什么当jquery api本身说从jquery 1.6开始这是不正确的时候,你会坚持使用attr