2015-06-15 248 views
1

我知道這個問題已被問了幾次,但我似乎無法得到這個工作。當孩子點擊時,我不希望父事件發生。我有以下幾點:點擊子元素觸發父級點擊事件

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

而下面的jQuery:

$(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'); 

       });    
      }); 

    }); 

的單擊事件是與tabItem類的父。但是當我點擊子div,父事件文件。以下是一個工作示例jsfiddle

+0

通過答案http://stackoverflow.com/a/6945909 – Satpal

+0

你總是點擊一個孩子,因爲文本是內部跨度。 – adeneo

+0

函數應該附加到span元素而不是整個容器:''(this).find('span')。on('click',function(e){''。 – user2755140

回答

2

您需要在子項的事件處理函數上調用event.stopPropagation()。這將防止事件冒泡到父元素。

對此非常小心,因爲如果你不小心的話,你可以快速切斷從冒泡到父母的所有點擊事件。這顯然是而不是你想要什麼。

+1

準確地說,這樣可以防止孩子點擊傳播/冒泡到父類。 –

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(); 

     }); 

,其中重要的變化是:

$(本)。在( '點擊',功能(E){

e.stopPropagation( );

相關問題