如何过滤掉事件处理程序中的子元素事件
How to filter out child element events in a event handler?
我有bootstrap button-group。此外,一个基于jQuery的事件处理程序(使用事件委托)可以根据click event在适当的.btn上设置/取消bootstrap .active类。
当我的按钮里面有html元素时,问题就发生了。当您单击按钮的子元素时,.active类被设置在.btn的子元素上。
如何只接收我感兴趣的元素的事件?
http://jsfiddle.net/0nc3wjq4/要重现这个问题,请点击按钮中的一个数字,然后点击另一个按钮中的另一个数字。
<div class="btn-group btn-group-justified pipeline" role="group">
<a href="#" class="btn btn-default" role="button">
<h3 class="text-center">767</h3>
<p class="text-muted text-center">Stage1</p>
</a>
</div>
事件处理程序$( ".btn-group" ).on( "click", ".btn", function( e ) {
$(this).siblings(".active").removeClass('active'); // previous
$(e.target).addClass('active'); // current
});
将$(e.target)
替换为$(this)
e.target
显示为h3
/p
而不是button
e.target
是触发事件的元素,即您点击的h3
将事件传播到a.btn
。然后被事件处理程序捕获。
this
是触发处理程序的元素。
jsFiddle Demo
您正在寻找返回false。这将阻止传播(这与防止默认不同),并防止默认的单击操作。此外,您可以利用这里的链接在两行中完成此操作。
$('.btn').on('click',function(){
$(this).addClass('active').siblings(".active").removeClass('active');
return false;
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- React应用程序:道具在下一个事件后更新
- animationEnd 事件处理程序 - 事件侦听两次
- Chrome 扩展程序:事件侦听器
- DHTMLX 移动调度程序事件详细信息视图高度问题
- 为单个定期事件保存单个 DHTMLX 计划程序事件记录
- 在拖动时禁用Fullcalendar计划程序事件捕捉
- Cordova检查关闭应用程序事件并保存日期/时间
- 如何在没有处理程序事件的情况下执行Jquery方法
- Firefox插件:无法收听Firefox "退出-应用程序"事件
- 相对于处理程序事件的按键事件
- 如何将处理程序事件添加到数组中
- 正在移动设备上停止Famo.us手势处理程序事件传播
- Windows 8 Javascript应用程序事件监听器问题