Ответ 1
Используйте это:
$("#myGrid tbody tr").live('click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
.live()
работает для текущего будущего элементов.
Я пытаюсь использовать метод делегата в сетке, которую я обертываю плагином 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);
});
Я пробовал разные комбинации селектора, и никто не запустил его.
Спасибо Пол Сперанца
Используйте это:
$("#myGrid tbody tr").live('click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
.live()
работает для текущего будущего элементов.
Попробуйте это вместо:
$('#myGrid').delegate('tr', 'click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
Там есть хорошая вероятность, что некоторые события на вашем теле становятся беспорядочными и/или твой человек получает манипулирование. Я сомневаюсь, что вся таблица тоже страдает от этой проблемы.
Попробуйте это
$('#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);
});
За кулисами 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: live
устарел в новой версии jQuery
Если новые строки добавляются динамически, вы должны использовать метод live
для элементов, изменить delegate
на live