触发复选框时,为什么"已检查"属性不正确?

nop*_*ole 5 html javascript checkbox jquery

在下面的代码中使用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");
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="the-input" type="checkbox">
Run Code Online (Sandbox Code Playgroud)

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属性:<input type="checkbox" checked>如果是,它如何指定属性但是默认为关闭?(因为checked="false"或者checked=""或者checked="0"不会让选择它的默认值.

Exp*_*lls 5

不,他们不一样. .attr是DOM属性.这将是checked如果该元素是

<input type=checkbox checked>
Run Code Online (Sandbox Code Playgroud)

这是物业单击时得到改变.

至于你的相关问题,checked是一个布尔属性,所以没有办法指定在具有checked属性的情况下不检查元素.

我不知道你为什么会想坚持使用attrjQuery的API本身说,这是不正确的的jQuery 1.6