2012-08-26 24 views
0

我希望事件能夠被具有適當上下文的任何元素觸發。現在我正在這樣做:通用代理與jQuery

$(document.body).on('mycustomevent', '*', function(e) { 
    e.stopPropagation() 
    console.log('mycustomevent') 
    console.log(this) 
} 

這有什麼問題嗎?有沒有更好的辦法?

另一個相關的問題是我將如何觸發此事件的未附加到文檔的元素?即:

$('<div></div>').trigger('mycustomevent') 
+0

您可能想通過'body *'來避免'html'和'body'元素,儘管這取決於您的情況。 –

+0

「e.stopPropagation()」調用沒有多少意義,因爲您已經在正文級別處理事件 - 也就是說,在處理程序被調用時,它已經從原始目標元素傳播開來。 – nnnnnn

+0

而不停止傳播,事件將在DOM樹上的每個單元上觸發。 –

回答

0

對於第一部分,我會用$(document).on來代替。

對於第二部分,只需將一個事件處理程序附加到該元素本身。

$('<div></div>').on('mycustomevent', function(e) { 
    e.stopPropagation() 
    console.log('mycustomevent') 
    console.log(this) 
}).trigger('mycustomevent') 
+0

1)原因? 2)我試圖避免這種情況,因爲我試圖使我的代碼模塊化(即兩個模塊只通過事件進行通信) –

+0

它的更多類型,文檔包含所有元素(即頭,標題等)和它看起來很奇怪。 – Musa