Удалить обработчик события из дочернего элемента связанного элемента - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть обработчики кликов, которые я хочу применить к строкам в моей таблице:

var myTable = $(this);
myTable.on('expand', 'tr', myHandler);
myTable.on('click', 'tr', function () {
    $(this).trigger('expand');
});

function myHandler(e) {
    // my action
}

Это очень упрощенная версия, но она запускает метод jQuery, который расширяет строки. Я хочу удалить этот обработчик из определенных строк в зависимости от их содержимого. У меня есть функция, которая запускается каждый раз, когда щелкают строки. Если он не соответствует установленным условиям, запускается метод, отображающий сообщение, информирующее пользователя о проблеме. Я хочу теперь отключить щелчок, чтобы развернуть эту строку.

function stopFunction(row) {
    row.find('th[scope=row]').parents("#tableID").off('expand', 'tr', myHandler);
}

Выше просто удаляет щелчок, чтобы расширить возможности из всех строк. Я не знаю, как разрешить щелчок по другим строкам, а просто удалить обработчик из этой единственной строки таблицы. Обратите внимание, что row.find('th[scope]') - это ячейка таблицы строки, первым родителем которой является ее строка, а затем родительским элементом строки является таблица (@tableID).

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012
function stopFunction(row) {
    row.on("click", function (e) {
        e.stopPropagation();
    });
}

Подтверждение концепции.

1 голос
/ 15 февраля 2012

Как вы узнали, ваш .off вызов отключит весь обработчик событий.Это связано с тем, что при использовании on (что является хорошей практикой) у вас есть только один обработчик событий, который отвечает на все соответствующие элементы (tr в вашем случае).

Я предлагаю вам сделать это с помощью классоввместо.Добавление класса no-expand к тем tr, которые не должны расширяться, и вместо этого использование этого обработчика событий:

myTable.on('click', 'tr:not(".no-expand")', function() { ... })

function stopFunction(row) {
  row.addClass("no-expand");
}
...