2009-10-26 94 views
0

我有这样的设置:jQuery的事件帮助

<div id="container"> 
     <div id="close">Close</div> 
    </div> 

然后在我的jQuery我有这样的:

$("#container").live("click",function(){ 
    changeTabs(); 
}); 

$("#close").live("click", function(){ 
    closeTabs(); 
}); 

但问题是,当你点击关闭的div它激发双方事件。我猜测这是因为第二个div覆盖了第一个div。那么我怎样才能取消或停止第一个射击事件呢?

回答

4

退房event.stopPropagation()

the jQuery docs

停止事件的冒泡到 父元素,防止任何父被通知 事件 处理程序。

在你的情况,这可能看起来像

$("#close").live("click", function(evt){ 
    evt.stopPropagation(); 
    closeTabs(); 
}); 
+3

+1 spot on,'return false'将stopPropagation和preventDefault(在jQuery事件处理程序中)。 – karim79 2009-10-26 22:35:54

+0

它没有工作。它仍然运行changeTabs()函数 – ngreenwood6 2009-10-26 22:48:48

0

这可能会实现:

$("#container:not(#close)").live("click",function(){ 
    changeTabs(); 
}); 

$("#close").live("click", function(){ 
    closeTabs(); 
}); 

使用not selecto

0

我不知道你为什么要使用一个div为亲密的单击事件,你还好吗使用输入按钮呢?

<div id="container"> 
     <input type="button" id="close" value="Close"/> 
</div> 

$("#container").live("click",function(){ 
    changeTabs(); 
}); 

$("#close").live("click", function(){ 
    closeTabs(); 
    return false; 
}); 
+0

输入按钮将不起作用。 – ngreenwood6 2009-10-26 22:49:23

-1

好吧,所以工作的方法是在closeTabs()函数下,我没有返回false;并似乎修复它