javascript - 为什么触发复选框时 "checked"属性不为真?

标签 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">

is(':checked')prop("checked")都可以显示 true 但 `attr("checked") 将显示未定义。我以为他们是一样的? (即使我们手动点击checkbox也是一样的效果)。

此外,如果我设置 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" 默认情况下不会取消选中。

最佳答案

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

,它将被检查
<input type=checkbox checked>

点击时更改的是属性

至于您的相关问题,checked 是一个 bool 属性,因此根本无法指定元素在具有 checked 属性时未被检查。

我不确定您为什么要在 the jQuery API itself says this is incorrect as of jQuery 1.6 时坚持使用 attr

关于javascript - 为什么触发复选框时 "checked"属性不为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768296/

相关文章:

javascript - 使用 jQuery 刷新标签 : text() or replaceWith()

jquery - 将 .on() 与 .not() 链接起来以从对象中删除不需要的元素

javascript - 如何以编程方式将 HTML 渲染到 div 标签并让内容换行?

javascript - 如何选择 id 取决于 javascript 变量的行?

javascript - HTML onclick 函数不起作用

html - 网站全景查看器

html - 从框架加载 https 站点

javascript - PHP + JavaScript

javascript - React 输入字段将空字符串记录为第一次击键

javascript - 在mousedown上创建新的div