单击子元素将触发父单击事件

时间:2015-06-15 19:15:10

标签: jquery click

我知道这个问题已被问过几次,但我似乎无法让这个问题起作用。当孩子点击时,我不希望父事件被触发。我有以下内容:

# Even penalty
solve.my.QP(c(0, 0), 1, diag(1, 2))
# [1] 0.5 0.5

# Encourage inclusion of first variable
solve.my.QP(c(0.1, 0), 1, diag(1, 2))
# [1] 0.525 0.475

以下jquery:

<div class="tabItem">
    <span> Item 1</span>
    <div class='contentBody'>Item 2 Body</div>
</div> 

click事件适用于类$(document).ready(function() { $('.tabItem').each(function(index){ $(this).attr('id', 'tabIndex'+index); var contentDiv = $(this).find('div').first(); var position = contentDiv.position(); var right = $(window).width() - position.left - contentDiv.width() ; var top = (position.top - 18) ; var contentId = 'tabContent' + index; $(contentDiv).css( "display", "none" ).css({top: top, left: 200}).attr('id', contentId); $(this).on('click', function() { $(this).removeClass('tabItem').addClass('tabItemSelected'); $(currentTab).removeClass('tabItemSelected').addClass('tabItem'); if($('#' + currentContentBody).is(":visible")){ $('#' + currentContentBody).toggle( "slide" ); // close the last tab } if($(contentDiv).is(":hidden")){ $(contentDiv).toggle( "slide" ); } currentTab = $(this); currentContentBody = $(contentDiv).attr('id'); }); }); }); 的父级。但是,当我单击子div时,父事件文件。这是一个工作示例jsfiddle

3 个答案:

答案 0 :(得分:3)

您需要在孩子的事件处理程序上调用event.stopPropagation()。这样可以防止事件冒泡到父元素。

要非常小心,因为如果你不小心的话,你可以快速切断所有点击事件,从冒泡到父母。这显然不是你想要的。

答案 1 :(得分:2)

另一种可能的解决方案是将click事件绑定到span

$(this).find('span').on('click', function(e) {

DEMO:https://jsfiddle.net/lmgonzalves/asqwnr8v/3/

注意:您还需要在$(this)事件中修复一些$(this).parent()click

答案 2 :(得分:0)

只需将点击处理程序更改为:

        $(this).on('click',  function(e) {               

            $(this).removeClass('tabItem').addClass('tabItemSelected');                                         

             $(currentTab).removeClass('tabItemSelected').addClass('tabItem');  

            if($('#' + currentContentBody).is(":visible")){
                $('#' + currentContentBody).toggle( "slide" ); // close the last tab
            }
            if($(contentDiv).is(":hidden")){
                $(contentDiv).toggle( "slide" );    

            }           
             currentTab = $(this);
             currentContentBody = $(contentDiv).attr('id');

            e.stopPropagation();

        });

重要的变化是:

  

$(this).on('click',function(e){

  

e.stopPropagation();