在下面的代码中使用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;
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"
默认情况下不会取消选中。
答案 0 :(得分:5)
.attr
是DOM属性。如果元素为,则为checked
<input type=checkbox checked>
单击时会更改属性。
至于你的相关问题,checked
是一个布尔属性,所以没有办法指定在检查属性时不检查元素。
我不确定您为什么要在the jQuery API itself says this is incorrect as of jQuery 1.6
时坚持使用attr