点击事件触发两次
Click event triggering two times
我试图在点击标签文本时运行一些功能,但点击事件触发了两次
HTML
<label class="label_one">
Label One
<input type="checkbox"/>
</label>
但是,如果我像这样更改html代码,就不会发生这种情况
<label for="test" class="label_two">
Label Two
<input type="checkbox"/>
</label>
我的脚本是这样的:
$('.label_one').click(function(){
console.log('testing');
});
有人能解释一下为什么会这样吗
我的小提琴在这里,检查一下
https://jsfiddle.net/sureshpattu/hvv6ucu8/3/
这是因为事件冒泡。
通常,所有元素都会将事件冒泡到文档的根,而label
标记会将事件气泡到其子节点,这就是单击标签dom时输入标记的勾选方式。
因此,在您的案例中,您将事件处理程序附加到标签,因此
- 单击标签标签时调用
- 事件在其中冒泡,复选框被选中,复选框再次将事件冒泡到其作为
label
标记的父节点,因此它被调用两次
要解决这个问题,只需将事件处理程序附加到input/checkbox标记,它应该可以正常工作。
我无法在我使用的chrome版本中重现这一点。
但如果你在某些浏览器中遇到这种情况,很可能是因为-
根据规范,包含输入的标签以及通过for
属性连接到输入的标签在单击时会触发对相关输入的单击。
因此,在第一种情况下,有两个点击事件:
- 实际点击
<label>
- 点击标签触发的
<input>
在<input>
上触发的一个将冒泡到<label>
并触发您的处理程序。
在第二种情况下,由于指定了for
属性,并且没有与"test"的id
匹配的输入,因此即使输入在标签内,也不会触发额外的单击。
单击checkbox
并单击label
。尝试在输入上使用.change
事件
$('.label_one input').change(function(){
var html = '<div class="log_sec_one">Log</div>';
$('.logs').append(html);
});
$('.label_two input').change(function(){
var html = '<div class="log_sec_two">Log</div>';
$('.logs').append(html);
});
演示
将输入移动到标签之外,并使用for=""
属性。
<label class="label_one" for="checkbox_one">
Label One
</label>
<input type="checkbox" id="checkbox_one" />
<br/><br/>
<label for="checkbox_two" class="label_two">
Label Two
</label>
<input type="checkbox" id="checkbox_two"/>
<div class="logs"></div>
JSFiddle:https://jsfiddle.net/hvv6ucu8/2/
<label for="text" class="label_one">
Label One
<input type="checkbox"/>
</label>
<br/><br/>
<label for="text" class="label_two">
Label Two
<input type="checkbox" name="1"/>
</label>
您忘记在标签(labelone)中放置for属性。只要改变一下。它将工作
相关文章:
- Jquery点击事件必须点击两次
- 一次点击,两次'单击'事件已启动
- 替换的超时事件触发两次或两次以上(有时)
- jquery on触发器按键事件两次
- 骨干视图触发事件两次
- animationEnd 事件处理程序 - 事件侦听两次
- 触发的事件被接收两次.如何找到鬼视图
- 服务器触发客户端事件两次
- `object:selected`事件触发两次
- 如何处理iframe中两次或根本不触发的IE11 localStorage事件
- 谷歌地图api v3 zoom_changed事件在fitBounds调用后激发了两次
- 为什么主干视图触发更改事件两次
- 如何防止在快速单击时两次调用en事件处理程序
- jQuery点击事件触发两次
- 为什么事件mouseenter在JavaScript中触发两次
- 在具有单击事件的 li 内时停止选中两次复选框
- 引导模式切换事件发生两次
- j查询点击事件触发两次
- 骨干模型触发“变化”.两次事件
- 在父元素具有相同事件函数的子元素上单独触发两次事件函数