由于某种原因,此代码无法正确获取复选框的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
答案 0 :(得分:3)
已解决,在您的情况下,函数调用失去了上下文,当您使用事件侦听器时,请使用事件执行所有检查,而不是元素,因为它将把元素的旧上下文绑定到功能。
clickArray = document.querySelectorAll("input");
const changeStyle = style => {
console.log(style);
}
clickArray.forEach(
(item, index) => {
item.addEventListener('click', function (e) { changeStyle(e.target.checked) })
}
)
答案 1 :(得分:2)
此元素:
<input type="checkbox" name="chk1" value="chk1">
将报告.checked = false
,因为它没有属性checked
。如果您想拥有.checked = true
元素,则应该为
<input type="checkbox" name="chk1" value="chk1" checked="checked">
注意:<input>
中的type=checkbox
没有使用属性value
。因此,它被忽略。它对其.checked
属性没有影响。
答案 2 :(得分:1)
您可以尝试将 changeStyle()包装在匿名函数的一侧:
var clickArray = document.querySelectorAll("input")
const changeStyle = style => {
console.log(style);
}
clickArray.forEach(
(item, index) => {
item.addEventListener('click', function(){ changeStyle(this.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>
答案 3 :(得分:1)
问题在于调用item.checked
时会得到changeStyle
,这是在添加事件侦听器时,而不是事件发生时。
不是将item.checked
传递给changeStyle
,而是传递item
并让changeStyle
获得checked
属性。
const clickArray = document.querySelectorAll("input")
const changeStyle = element => {
return (() => console.log(element.checked))
}
clickArray.forEach(
(item, index) => {
item.addEventListener('click', changeStyle(item))
}
)
<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