我正在尝试在我使用DataTables.Net插件包装的网格上使用委托方法。我最初有这个代码按预期工作。
$("#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);
});
我尝试了选择器的不同组合,没有一个让它起作用。
由于 Paul Speranza
答案 0 :(得分:15)
请改为尝试:
$('#myGrid').delegate('tr', 'click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
很有可能你身上的某些事件变得混乱和/或你的身体被操纵了。我怀疑整个表格也遇到了这个问题。
答案 1 :(得分:4)
使用此:
$("#myGrid tbody tr").live('click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
.live()
适用于未来元素的当前。
答案 2 :(得分:2)
在幕后,bind
,delegate
和live
都使用 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:在{jQuery>的较新版本中不推荐使用live
答案 3 :(得分: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);
});
答案 4 :(得分:-4)
如果动态添加较新的行,则必须对项目使用live
方法,将delegate
更改为live