2010-03-10 88 views
11

我想在我用DataTables.Net插件包裝的網格上使用委託方法。我原本有這樣的代碼,按預期工作。JQuery委託方法不起作用

$("#myGrid tbody tr").click(function() { 
     var id = $(this).children('td').eq(0).text(); 
     alert(id); 
    }); 

但是,如果我改變分頁大小,那麼較新的行沒有調用函數的click事件。我決定新的JQuery委託方法應該做我想要的;然而,它在任何tr元素上什麼也不做。

任何人都可以解釋爲什麼這不起作用:

$('#myGrid tbody').delegate('tr', 'click', function() { 
     var id = $(this).children('td').eq(0).text(); 
     alert(id); 
    }); 

我曾嘗試選擇的不同組合,並沒有得到它的工作。

感謝 保羅斯佩蘭扎

+3

這是爲什麼社會維基? – 2010-03-10 15:57:19

回答

4

使用此:

$("#myGrid tbody tr").live('click', function() { 
    var id = $(this).children('td').eq(0).text(); 
    alert(id); 
}); 

.live()作品未來元素的電流。

+5

這就是'delegate'的意義,除非它具有更好的性能,這是由於所需的事件冒泡較少。 – 2010-03-10 16:11:41

+0

與'委託'一樣。我建議你閱讀它。 – miketaylr 2010-03-10 16:12:37

+2

謝謝大家,我避免'活',因爲我認爲代表應該取代它。我仍然不明白爲什麼代表不適合我,但活着就是如此,一切都如預期一樣。再次感謝您的快速響應! – 2010-03-10 16:59:46

-4

如果被動態地添加新的行,你必須使用live方法上的項目,改變delegatelive

+2

我想你誤解了委託的含義 - 它只是像'live'這樣的事件代表團。 – miketaylr 2010-03-10 16:11:59

+1

'delegate'在它的核心中使用'live',但它具有比通過在不是基礎文檔的共同祖先上使用事件委託而生活更好的性能。 – 2010-03-10 16:12:27

15

試試這個:

$('#myGrid').delegate('tr', 'click', function() { 
    var id = $(this).children('td').eq(0).text(); 
    alert(id); 
}); 

有一個很好的機會,一些事件你身上的東西越來越混亂和/或你的屍體正在被操縱。我懷疑整個桌子也有這個問題。

+0

請注意,根據您的dom的結構,這可能比使用「live」快幾倍。 – 2010-03-10 18:32:08

1

試試這個

$('#myGrid tbody').delegate('click', 'tr', function() { 
    var id = $(this).children('td').eq(0).text(); 
    alert(id); 
}); 

$('body').delegate('click', '#myGrid tbody tr', function() { 
    var id = $(this).children('td').eq(0).text(); 
    alert(id); 
}); 
1

在幕後,binddelegatelive都使用方法on

我有一些問題delegate,所以我開始使用on來代替。 將您的delegate電話轉換爲on很簡單:只需交換第一個和第二個參數即可。

此:

$('#myGrid tbody').delegate('tr', 'click', function() { 
     var id = $(this).children('td').eq(0).text(); 
     alert(id); 
    }); 

變爲這樣:

$('#myGrid tbody').on('click', 'tr', function() { 
     var id = $(this).children('td').eq(0).text(); 
     alert(id); 
    }); 

BTW:live jQuery中的新版本已經過時

+1

「on」僅適用於1.7 – 2012-12-18 09:39:17

+0

「on」在iPhone或iPad上無法正常工作 - 兩者均不能正常工作。如果委託了確切的元素,委託就會工作 - 因此它不適用於ajax更新的元素。它是一個真正的頭痛 - 我沒有找到一個很好的解決方法,只需點擊通過ajax更新的表中的行即可! – Johncl 2013-06-24 11:24:41

+1

我個人在iphones,ipads和android 2.3和4上使用'on',它工作。有可能你可能沒有在這些平臺上使用jQuery? – 2013-07-07 11:37:46