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/

10-09 19:18