7

在下面使用 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')and都可以显示为prop("checked")真,但 `attr("checked") 将显示未定义。我以为他们应该是一样的?(即使我们手动点击复选框,也是一样的效果)。

另外,如果我checked在 HTML 中设置,以便默认选中复选框(http://jsfiddle.net/UcGyM/1/),现在attr("checked")将打印出checked两个触发,所以它无法判断是否是否检查过——这是为什么呢?(奇怪的是两个都显示checked,但是$("input").attr("checked", true);or$("input").attr("checked", false);可以打开或关闭。)

一个相关的问题是,如果我们要坚持使用attr("checked"),这是否意味着在 HTML 中,它必须具有checked属性:<input type="checkbox" checked>,如果是,它如何指定属性但默认为关闭?(因为checked="false"or or checked=""or checked="0"will not make it unchecked by default.

4

1 回答 1

5

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

<input type=checkbox checked>

它是单击时更改的属性。

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

attr我不知道当jQuery API 本身说这是不正确的 jQuery 1.6时,你为什么要坚持使用

于 2013-04-02T15:43:03.490 回答