繁体   English   中英

单击父级时触发子级单击事件

[英]Trigger a child click event when clicking on parent

假设你有这个 html:

<div class="parent">
    <a href="#" class="child"></a>
    <span>other elements</span>
</div>
<div class="parent">
    <a href="#" class="child"></a>
    <span>other elements</span> 
</div>

孩子有一个点击事件监听器:

$('body').on( 'click', '.child', doSomething );

如果单击父元素的任何部分,如何触发单击? 我尝试过这样的事情,但它不起作用。 doSomething function 没有被触发。

$('.parent').each( function() {
    $(this).on( 'click', function( e ){
        $(this).find('.child').triggerHandler('click');
        e.preventDefault();
    } );
});

如果您想处理.parent元素的点击,那么为什么不简单地将事件处理程序附加到.parent呢?

$('body').on( 'click', '.parent', doSomething);

也根据jQuery 文档

在文档树顶部附近附加许多委托事件处理程序会降低性能 [...]
为了获得最佳性能,请将委托事件附加到尽可能靠近目标元素的文档位置。 避免过度使用 document 或 document.body 来处理大型文档的委托事件。

// For example, instead of 
$( "body" ).on( "click", "#commentForm .addNew", addComment )
// use 
$( "#commentForm" ).on( "click", ".addNew", addComment ).

您在这里根本不需要.each()

您可以尝试以下方法:

 $('.parent').on('click', function(e){ $(this).find('.child').get(0).click(); e.preventDefault(); }); $('body').on('click', '.child', doSomething); function doSomething(e){ console.log('Child of ' +$(e.target).parent().index() +' parent tiggered'); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="parent"> <a href="#" class="child"></a> <span>other elements</span> </div> <div class="parent"> <a href="#" class="child"></a> <span>other elements</span> </div>

$(document).on('click', '.parent, .child', function (event) {
   // do something

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM