2010-09-29 13 views
1

我有一個大表/網格,對每一行,表頭事件等有很多事件的大表,是否使用事件冒泡更有效?

而是我產生事件或事件綁定到每個小區的,倒不如把一個「全球性」事件,然後我相信當發生點擊或鼠標懸停事件時,它會在整個表上冒泡到我的'全局'事件,然後篩選事件調用者並作出反應。

我已經閱讀過關於此的內容,但不知道我是否有這個想法。

這種方法有什麼問題嗎?

回答

2

是的,你的想法是正確的,是的,它更好。使用jQuery它就像直接綁定事件一樣簡單 - 查找.delegate()方法。你可以做的是在容器元素上放置一個事件處理程序,並告訴它如何根據普通的jQuery選擇器將事件路由到處理程序以過濾實際的事件目標。

這樣:

$('#container').delegate('td.clickMe', 'click', function(e) { 
    /* table cell click */ 
}); 
0

這通常是一個不錯的辦法。正如Pointy所說,實現過濾的最好方法是使用原生jQuery $().delegate()函數。這肯定會更有效率。

要記住的主要問題是,默認情況下並非所有事件都會冒泡。 jQuery試圖解決這個問題,但據我所知,窗體上的事件不會在Internet Explorer中冒泡。

另一個需要記住的問題是,如果您撥打event.stopPropagation()(或從綁定函數返回false),綁定在樹上的函數將不會被調用。

0

你的想法是正確的,在我的選擇。你可以這樣做:

$("table#yourTable").click(function(evt){ 
    if($(evt.target).is('td.someTd')) { 
    //do whatever you want to do 
    } 
}) 

因此,你只綁定一個點擊事件並過濾被點擊的目標元素。