2012-06-18 43 views
-2

我有一個問題如何選擇一個div的其餘部分?

<div id='parent'> 
    <div id='child'> 
    </div> 
</div> 

我想是孩子被點擊addClass時,和父母的其餘部分被點擊removeClass時,所以當我嘗試做

$('#child').click(function(){ 
    $(this).addClass(); 
}) 
$('#parent').click(function(){ 
    $('#child').removeClass(); 
}) 

它不工作我認爲它是因爲孩子實際上在父母的內部,所以當孩子被點擊時,父母點擊正確?

那麼我該怎麼做?

+2

請參閱[如何接受一個答案工作](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – mplungjan

回答

5

試試這個:

$('#child').click(function(evt){ 
    evt.stopPropagation(); 
    $(this).addClass("myClass"); 
}); 
+0

偉大的工程,thanx人! – paynestrike

+1

@paynestrike請接受答案**點擊'V'標記** –

2

你可以使用event.stopPropagation來阻止事件冒泡DOM樹,阻止任何父處理程序被通知的事件。

$('#child').click(function(e){ 
    e.stopPropagation(); 
    $(this).addClass(); 
}); 
0

一些用戶已經提出了一個很好的解決方案 - 在這裏就是爲什麼它的工作原理的解釋:

當你點擊一個HTML元素(實際上是一個DOM對象...),單擊事件「泡沫」一直到根元素。例如,如您所期望的,點擊#child也會觸發#parent中的點擊。

要停止這種行爲,您需要在點擊事件上調用.stopPropagation() - 這會告訴瀏覽器您不希望該事件傳播,但保持其爲「本地」。基本上,當你在這裏處理它時,你已經完成了它,不想再看到它。

方便的是,jQuery事件處理程序將事件作爲第一個參數,因此如果您爲任何函數分配了function (e) { ... }簽名,您可以像其他人所建議的那樣通過e.stopPropagation();停止事件傳播。在你的情況,你想

$('#child').click(function(e){ 
    $(this).addClass(); 
    e.stopPropagation(); 
}); 
$('#parent').click(function(){ 
    $('#child').removeClass(); 
}); 
+0

您可能也有興趣瞭解'e.preventDefault()',當錨標籤不應該作爲鏈接使用時很有用,即使它是不一定適用於這個特定的問題。 –

相關問題