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

时间:2013-04-02 15:38:50

标签: javascript jquery html checkbox

在下面的代码中使用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">
&#13;
&#13;
&#13;

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

此外,如果我在HTML中设置checked以便默认选中该复选框(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"默认情况下不会取消选中。

1 个答案:

答案 0 :(得分:5)

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

,则为checked
<input type=checkbox checked>

单击时会更改属性

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

我不确定您为什么要在the jQuery API itself says this is incorrect as of jQuery 1.6

时坚持使用attr