2009-10-26 36 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;並似乎修復它