2012-02-15 41 views
2

我的孩子刪除的事件處理程序單擊處理我想申請在我的表中的行:從綁定的元素

var myTable = $(this); 
myTable.on('expand', 'tr', myHandler); 
myTable.on('click', 'tr', function() { 
    $(this).trigger('expand'); 
}); 

function myHandler(e) { 
    // my action 
} 

這是一個非常簡化的版本,但它觸發一個jQuery方法擴展行。我想從特定的行中刪除這個處理程序,具體取決於它們的內容。每次單擊該行時,我都會觸發一個函數。如果它與設置的條件不匹配,將觸發一個方法,顯示一條消息,通知用戶該問題。我想現在禁用點擊以展開此行。

function stopFunction(row) { 
    row.find('th[scope=row]').parents("#tableID").off('expand', 'tr', myHandler); 
} 

以上只是刪除點擊以展開所有行的功能。我不知道如何去允許點擊其他行,而只是從這個單獨的表格行中刪除處理程序。請注意,row.find('th [scope]')是行的表格單元格,它的第一個父元素是行,然後行的父元素是表格(@tableID)。

回答

1

正如您發現的那樣,您的.off調用將關閉整個事件處理程序。這是因爲,使用on(這是一種很好的做法),您只有一個事件處理程序,它響應所有匹配元素(在您的情況下爲tr)。

我建議你用類來代替。添加類no-expand那些tr S的不應該擴大,並利用此事件處理程序,而不是:

myTable.on('click', 'tr:not(".no-expand")', function() { ... }) 

function stopFunction(row) { 
    row.addClass("no-expand"); 
} 
+0

你,先生,踢屁股。謝謝! – Tom 2012-02-15 15:43:42

+0

我試過這個方法,因爲它允許我將一個類添加到特定的行。這比停止傳播有更多的用處,因爲這基本上可以做到這一點,除了我可以通過類來識別行而不是所有事情。 (我知道我只能在類匹配的情況下才能使用停止傳播)。 – Tom 2012-05-07 13:52:58