Получить обработчик click () в jQuery для дальнейшего использования - PullRequest
1 голос
/ 13 апреля 2010

Я использую плагин jQuery tablesorter для сортировки таблицы, которая назначает обработчики .click () для <th> s в таблице. Поскольку моя таблица имеет чередующиеся цвета для каждого столбца, я построил простую функцию fix_table_colors(identifier), которая делает то же, что и при вызове вручную с помощью Firebug. Однако я хотел бы, чтобы это автоматически вызывалось после сортировки.

Для этого я решил извлечь обработчик .click () из <th> s и назначить новый обработчик, который просто вызывает предыдущий обработчик, за которым следует fix_table_colors().

( Этот ТАК вопрос похож, но использует стандартные атрибуты onClick (), которые здесь не сработают.)

Из принятого ответа на на этот вопрос я создал следующий код:

$(document).ready(function() {
    $("table.torrents").tablesorter({
        debug: true,
        headers: {
            1: { sorter: 'name' },
            2: { sorter: 'peers' },
            3: { sorter: 'filesize' },
            4: { sorter: 'filesize' },
            5: { sorter: 'filesize' },
            6: { sorter: 'ratio' }
        }
    });

    $('table.torrents thead th').each(function() {
        var th = $(this);
        var clickHandler = th.data('events').click[0];
        th.click(function() {
            clickHandler();
            fix_table_colors('table.torrents');
        });
    });
});

Хотя это концептуально правильно, clickHandler не является на самом деле функцией, и поэтому я не могу ее вызвать.

Немного больше копаясь в Firebug, я обнаружил, что щелчок [3], кажется, удерживает функцию, которую я ищу (и нажимаю [10] мой новый). При этом я получаю ошибку 'e is undefined' в строке 2 файла tablesorter.min.js.

Я даже иду по правильному пути? У меня есть ощущение, что с тем, что я нашел до сих пор, я могу сделать эту работу, но это будет намного ужаснее, чем я ожидал.

1 Ответ

4 голосов
/ 13 апреля 2010

Как насчет привязки к событию sortEnd (http://tablesorter.com/docs/example-triggers.html), как это?

$(document).ready(function() {
    $("table.torrents").tablesorter({
        debug: true,
        headers: {
            1: { sorter: 'name' },
            2: { sorter: 'peers' },
            3: { sorter: 'filesize' },
            4: { sorter: 'filesize' },
            5: { sorter: 'filesize' },
            6: { sorter: 'ratio' }
        }
    });

    $("table.torrents").bind("sortEnd",function() {
        fix_table_colors('table.torrents');
    });
});
...