window.onload = function(){
var wow = document.getElementById("wow");
wow.onclick = function(){
alert("hi");
}
}
<label id="wow"><input type="checkbox" name="checkbox" value="value">Text</label>
这是我的代码,当我单击“文本”时,它将发出两次警报声,但是当我单击该框时,
onclick
元素将仅触发一次,为什么? 最佳答案
当您单击标签时,它会触发单击处理程序,并且您会收到警报。
但是单击标签还会自动将click事件发送到关联的输入元素,因此将其视为对复选框的单击。然后事件冒泡会导致在包含元素(即标签)上触发click事件,因此您的处理程序将再次运行。
如果将HTML更改为此,则不会收到双重警告:
<input id="wowcb" type="checkbox" name="checkbox" value="value">
<label id="wow" for="wowcb">Text</label>
现在,标签使用
for
属性与复选框关联,而不是环绕标签。DEMO
关于javascript - 为什么onclick元素将为label元素触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24501497/