在下面的代码片段中,为什么当点击
这是因为HTML规范在4.10.4中描述的原因:
例如,在复选框标签可以勾选的平台上,单击以下代码片段中的
<label><input type=checkbox name=lost> Lost</label>
在其他平台上,行为可能只是将控件聚焦或不执行任何操作。
这意味着当单击
divClicked被触发两次的原因是,来自
,第二个合成的点击事件也冒泡到。
这通常是由于 click
事件的冒泡原理造成的:
当一个元素上发生事件时,它会在该元素、其关联元素、其父级和其他祖先元素上运行。
现在,当你点击 label
时,有两个事件会冒泡到这里:
1) 点击 div(预期的)
2) 点击 input(也是预期的)
2.1) 当触发
input
的点击时,这里也会再次触发div
的点击
您可以使用 event.bubbles
属性来确认此行为。
编辑:
连接 label
和 input
的原因:(我知道这绝对不是必需的,因为它已经存在于所有地方)
<label>
可以与控件相关联,方法是将控件元素放置在 <label>
元素内部,或使用 for 属性。这样的控件称为标签元素的标记控件。一个输入可以与多个标签相关联。for
并引用输入元素的 id
将会模拟元素在 label
内部的行为。这将会像任何子元素到父元素的事件一样,将 input
上的事件冒泡到 label
上。2.1
部分!事件冒泡的概念只是告诉我们,对标签的 click
或输入框的 click
会触发对 div
的点击...然后才是真正的原因,即 2.1
。 - Nishanth Matha<input>
的单击事件。事件不会向下冒泡到子元素或同级元素,只会冒泡到祖先元素。 - 4castle
label
元素上单击时,为什么divClicked
会被调用两次的问题呢? - guest271314