Как клонировать событие плагина jQuery Listen?
-
21-08-2019 - |
Вопрос
У меня есть несколько <tr>
элементы на моей странице с click()
событие, прикрепленное к изображению, которое находится внутри каждого из них.Я использую этот код
$(this).clone(true).appendTo("table#foo");
сделать следующее:
- скопируйте эти
<tr>
в другую таблицу - сохранить события кликов на изображениях внутри
<tr>
с (из-заtrue
аргумент)
Все это работает нормально.Теперь я добавил jQuery Слушать мероприятие для тех <tr>
s, чтобы пользователю не приходилось точно целиться:он/она может щелкнуть в любом месте <tr>
и я могу передать клик на изображение.
Это закодировано так:
$('tr.record').listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
Событие Listen() отлично работает с исходным элементом, но в клонированном элементе событие Listen() завершается сбоем. Событие щелчка изображения по-прежнему работает нормально.
Вот что мне говорит Firebug:
m(this, e.type) is undefined
... и он ссылается на строку 9 jquery.listen-1.0.3-min.js.
Как я могу заставить событие Listen() работать с клонированными элементами?
Обновлять
По умолчанию jQuery не копирует события клонированных элементов, а этот плагин создан для этого.
Тем временем автор плагина Listen() предложил другую стратегию — см. мой ответ ниже.
Решение
Ариэль Флеслер, создатель плагина Listen(), дал мне этот совет по электронной почте:
«Я думаю, что эту проблему можно решить и другим способом.Идея прослушивания (и делегирования событий) состоит в том, чтобы фактически избежать копирования событий для новых элементов ».
«Вы могли бы просто сделать:»
$('table#foo').listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
"Или даже:"
$.listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
«В первом примере таблица будет использоваться в качестве прослушивателя.Во 2-м,<html>
используется тег.Поэтому независимо от того, добавляете ли вы новые таблицы td/tr/tables.Это все еще будет работать ".