Событие клика не регистрируется на второй странице - PullRequest
0 голосов
/ 06 мая 2010

Я использую tableorter и tablesorter.pager. Вот мой код.

$(document).ready(function() {
$("#peopletable")
        .tablesorter({ widthFixed: true, widgets: ['zebra'] })
        .tablesorterFilter({ filterContainer: $("#people-filter-box"),
            filterClearContainer: $("#people-filter-clear-button"),
            filterColumns: [1, 2, 3],
            filterCaseSensitive: false
        })
        .tablesorterPager({ container: $("#peoplepager") });

$("#peopletable tr.data").click(function() {
    var personid = $(this).attr('id');
    $.ajax({
    type: "POST",
    url: "/Search/GetDocumentsByPerson",
    data: { "id": personid },
    datatype: "json",
    success: function(data) {
        var results = eval(data);
        $("#documentstable > tbody tr").remove();
        $.each(results, function(key, item) {
            $("#documentstable > tbody:last").append(html);
        });
        $("#documentstable").trigger("update");
    }
});
});
});

Все работает отлично, за исключением того, что когда я нажимаю на следующую страницу, событие нажатия кнопки не срабатывает. Это известная проблема с jquery tablesorter?

Ответы [ 3 ]

7 голосов
/ 06 мая 2010

Это потому, что элементы обновлены, те, к которым вы привязали обработчик кликов, исчезли, вы можете использовать .live(), чтобы решить эту проблему, измените это:

$("#peopletable tr.data").click(function() {

К этому:

$("#peopletable tr.data").live('click', function() {

В качестве альтернативы, если #peopletable не уничтожен, вы можете использовать .delegate(), например:

$("#peopletable").delegate('tr.data', 'click', function() {
1 голос
/ 15 июня 2011

Я также столкнулся с такой же проблемой с tablesorterPager второй страницей после использования плагина Jeditable (правка на месте) для некоторого элемента в используемой таблице tablesorterPager.

Я попытался отредактировать функцию привязки данных в Jeditable следующим образом

оригинальный код

 $(this).bind(settings.event, function(e) {

здесь settings.event соответствует параметру события, который мы определяем с помощью опцийНапример: нажмите

измененный код

 $(this).live(settings.event, function(e) {

Но .. Я обнаружил ошибку с tablesorterPager на страницах, отличных от первой страницы, не из-за привязки элементасобытие.когда мы вызываем tablesorterPager для любой таблицы с множеством строк, на загрузку страницы влияют только первые строки страницы таблицы.поэтому только первые строки страницы вызываются с помощью плагина Jeditable .другие строки на других страницах не назначаются с помощью плагина.по этой причине события на других страницах, кроме первой, не будут работать.

, чтобы предотвратить вышеуказанную ситуацию, мы можем добавить Jeditable плагин, вызывающий внутри функции updatePageDisplay .

Например:

function updatePageDisplay(c) {

    $(".tablerowdata").each(function(){

            $(this).editable("ajax/save.php", {
              tooltip : "click to edit...",
              data   : {"selectid1":"selectval1","selectid2":"selectval2","selectid3":"selectval3"},
              type   : "select",
              submit : "ok",
              event     : "click",
              select : "true",
            });
          });
0 голосов
/ 06 мая 2010

Создание нового элемента не будет дублировать событие, созданное методом click, если метод live делает это.

...