【发布时间】:2015-06-15 19:15:09
【问题描述】:
我知道这个问题已被问过几次,但我似乎无法解决这个问题。当孩子点击时,我不希望触发父事件。我有以下内容:
<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
【问题讨论】:
-
你总是在点击一个孩子,因为文本在 spans 内。
-
函数应该附加到 span 元素而不是整个容器:
$(this).find('span').on('click', function(e) {.