MDN文章是正确的.浏览器也是正确的.这种差异可以通过以下事实来解释:HTML复选框同时具有checked
content attribute和checked
JavaScript property,两者相关但不同.本文讨论了前者,而您的代码使用了后者.
101 content attribute对应于<input>
元素的HTML标记中的实际checked
、checked=""
或checked="checked"
属性(如果有的话).您可以通过调用Element.getAttribute
方法获取属性的值:
<input type="checkbox" id="test" checked="checked">
<button type="button" onclick="console.log(document.querySelector('#test').getAttribute('checked') ?? 'null');">Log Attribute</button>
在上面的片段中,默认情况下勾选复选框,无论您打开还是关闭复选框,该按钮都将记录字符串"checked"
.
相比之下,正如您所观察到的那样,100 JavaScript property反映了复选框的当前状态:
<input type="checkbox" id="test" checked="checked">
<button type="button" onclick="console.log(document.querySelector('#test').checked);">Log Property</button>