为啥触发复选框时“已检查”属性不正确? [复制]
Posted
技术标签:
【中文标题】为啥触发复选框时“已检查”属性不正确? [复制]【英文标题】:Why is the "checked" attribute not true when checkbox is triggered? [duplicate]为什么触发复选框时“已检查”属性不正确? [复制] 【发布时间】:2013-03-23 23:51:57 【问题描述】:在以下代码中使用 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')
和 prop("checked")
都可以显示为 true,但 `attr("checked") 将显示未定义。我以为他们应该是一样的? (即使我们手动点击复选框也是一样的效果)。
另外,如果我在 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"
默认不会取消选中它。
【问题讨论】:
This question 可能会有所帮助。 属性并不总是与属性保持一致,这就是为什么对.attr
/.prop
的更改如此重要和必要的原因。
大部分问题的答案都在这里api.jquery.com/prop
【参考方案1】:
不,它们不一样。 .attr
是 DOM 属性。如果元素是,则为checked
<input type=checkbox checked>
点击时改变的是属性。
至于您的相关问题,checked
是一个布尔属性,因此无法指定一个元素在具有选中属性的同时不被检查。
我不知道你为什么要坚持使用attr
而the jQuery API itself says this is incorrect as of jQuery 1.6
【讨论】:
以上是关于为啥触发复选框时“已检查”属性不正确? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
绑定到角度mat-checkbox的检查属性的方法被多次触发