2012-02-15 2 views
2

У меня есть мышь обработчик я хочу обратиться к строкам в моей таблице:Удалить обработчик события от ребенка связанного элемента

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).

ответ

1

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

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

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

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

, сэр, удар осла. Спасибо! – Tom

+0

Я пробовал этот метод, потому что он позволяет мне добавить класс в определенную строку. Это имеет больше пользы, чем распространение остановки, поскольку это по существу делает это, за исключением того, что я могу идентифицировать строки через класс, а не все. (Я знаю, что все еще могу использовать распространение остановки только в том случае, если класс соответствует). – Tom

Смежные вопросы