![](/img/trans.png)
[英]Ignore parent onclick when child onclick is clicked, using Javascript only
[英]Ignore Parent onClick event when Child element is clicked
请参阅 - http://www.bootply.com/dR7fxjP1bk
通过单击任何 div.rows(让我们称之为父级),一个 onClick 事件被激活,出于演示目的,会弹出一个警报。
当单击“信息”(橙色按钮)时(让我们称之为这个孩子),该行内的手风琴折叠,但问题是父母警报触发。
我需要信息按钮不触发警报,只有在单击其他任何地方时才会出现警报。
我尝试了各种方法,例如使用 (e)stopPropagation .on .off 调用等...我不是最好的 jquery 人,所以需要一点帮助才能让它工作 - 并且还帮助我学习一些东西!
<div class="row ticket-selector" onclick="alert('Hello World!');">
<a data-toggle="collapse" data-parent="#ticket-panel" href="#collapseOne" class="tickets-more"><span class="halflings info-sign orange"></span></a>
</div>
以上是 jist - 但请参阅以更好地理解 - http://www.bootply.com/dR7fxjP1bk
这个想法是删除onclick=""
处理程序将其值保存在另一个字段中,然后在自定义click
事件处理程序中执行(评估)值:
示例代码。
$(document).ready(function()
{
var elements = $(".ticket-selector");
elements.each(function()
{
var handler = $(this).attr('onclick');
$(this).data('click', handler);
});
elements.attr('onclick', '');
elements.click(function(e)
{
if (!$(e.target).hasClass("info-sign"))
{
eval($(this).data('click'));
}
});
});
如果情况是避免单击其中的元素,这将对您有所帮助。
function clickhere(obj){
let theid = obj.id;
console.log(theid);
event.stopPropagation();
}
如果使用 css 类不打扰您,您可以检查单击的元素属性/类。 像这样:
$('.parent-element').on('click',function(e){
if ( $(this).attr('data-toggle') ){//has attribute data-toggle
e.preventDefault();
return false;
}
});
这将更多地取决于您的 DOM 树。 您可以找到将禁用任何事件的条件
使用 css:
pointer-events: none;
这将使相关元素对鼠标事件完全透明。
将信息类从 div 中取出。 用另一个干净的 div 包裹它们。
在橙色按钮单击处理程序中添加 return false; 最后 - 这将防止将事件冒泡给父母。 像这样:
jQuery('.tickets-more').click(function(){
// your stuff here
return false;
});
我发现这对我来说可以捕获点击。
onclick="event.preventDefault ? event.preventDefault() : event.returnValue = false;"
简单的解决方案:
这可以在许多情况下工作,例如模态背景。 如果单击任何子组件,它将不会在父组件上触发:
<div class="row ticket-selector" onclick="handleClick();">
<a data-toggle="collapse" data-parent="#ticket-panel" href="#collapseOne" class="tickets-more"><span class="halflings info-sign orange"></span></a>
</div>
function handleClick(ev) {
if (ev.target === ev.currentTarget) alert('Hello World!');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.