2011-11-04 36 views
0

我收到一些奇怪的事情發生在我的JavaScript。我從服務器端獲取數據,當結果返回時,我使用表中的數據更新我的div。 然後我調用postUpdate並將一個函數綁定到表中的每一行。jQuery live(),1個鼠標點擊,但我有2個事件?

jQuery.fn.postUpdate = function(id) { 
    console.log('postUpdate with id: '+id); 
    if (id == "myContent") { 
     jQuery('#DataTable tr').live(
       'click', 
       function(event) { 
        jQuery.fn.showDetails(event);       
     }); 
    } 
};  

jQuery.fn.showDetails = function(event) { 
    console.log(event); 
}; 

但是,每次點擊該行時,我都會打印兩次該事件?

Object { originalEvent=Event click, type="click", timeStamp=351233505, more...} base.js (line 181) 
Object { originalEvent=Event click, type="click", timeStamp=351233505, more...} base.js (line 181) 

這裏的交易是什麼?在jQuery中的錯誤?

+1

您不應該將自己的函數掛在'jQuery.fn'之外。只需聲明名爲'postUpdate'和'showDetails'的函數即可。 – Dennis

回答

2

每當您撥打postUpdate時,都會添加一個額外的實時處理程序。

使用live後,每次添加元素時都不應重新添加處理程序,因爲處理程序將應用於所有匹配的元素。

+0

但是我每次獲取新的查詢時都會清楚我的div。最重要的是,這只是我第一次填充表格。 我不認爲我正在重新添加任何處理程序,因爲每次查詢新數據時,我的div中現有的內容都會被清除,而新的內容會被反饋回來。我仍然每次獲得2個事件鼠標點擊。 – codenamezero

+0

@codenamezero:'live'與元素的生命週期無關。如果你在頁面加載時也調用了這個函數,這可以解釋它。 – SLaks

+0

謝謝Slaks,我準備在()時試圖調用live,並且函數被註冊了。 jQuery非常神祕...可以將函數綁定到甚至不在DOM中的元素!非常感謝。 – codenamezero