Метод делегата jQuery не работает
Я пытаюсь использовать метод делегата в сетке, которую я обертываю с помощью 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);
});
Я пробовал разные комбинации селектора, и никто не заставлял его работать.
спасибо Пол Сперанца!--3-->
5 ответов
используйте этот:
$("#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);
});
кстати: live
устарел в более новой версии jQuery
если новые строки добавляются динамически, вы должны использовать live
метод на элементах, измените delegate
to live