由于某种原因,此代码未正确获取复选框的checked属性,而是始终为false . 我希望它能显示复选框是否已被选中 . 我错过了什么?谢谢
const clickArray = document.querySelectorAll("input")
const changeStyle = style => {
return (() => console.log(style))
}
clickArray.forEach(
(item, index) => {
item.addEventListener('click', changeStyle(item.checked))
}
)
<label for="chk1">
<input type="checkbox" name="chk1" value="chk1">
Bold
</label>
<label for="chk2">
<input type="checkbox" name="chk2" value="chk2">
Italic
</label>
<label for="chk3">
<input type="checkbox" name="chk3" value="chk3">
Underline
</label> const click
4 回答
问题是,当您调用
changeStyle
时,您正在获取item.checked
,这是您添加事件侦听器时,而不是在事件发生时 .不要将
item.checked
传递给changeStyle
,而是传递item
,并让changeStyle
获取checked
属性 .这个元素:
将报告
.checked = false
,因为它没有checked
属性 . 如果你想拥有.checked = true
元素应该是注意:
<input>
的<input>
没有使用属性value
. 因此,它被忽略了 . 它对.checked
属性没有影响 .您可以尝试在匿名函数的一侧包装changeStyle():
SOLVED ,在你的情况下,函数调用正在丢失上下文,当你使用eventlisteners时,使用event来执行任何检查,而不是元素,因为它会将元素的旧上下文绑定到函数 .