Метод делегата 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