У меня есть несколько <tr>
элементов на моей странице с click()
событием, прикрепленным к изображению, которое находится внутри каждого из них. Я использую этот код
$(this).clone(true).appendTo("table#foo");
сделать следующее:
- скопировать те
<tr>
в другую таблицу - сохранить события кликов на изображениях внутри
<tr>
s (из-заtrue
аргумента)
Все это прекрасно работает. Теперь я добавил событие jQuery Listen к тем <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 (), дал мне этот совет по электронной почте:
«Я думаю, что это может быть решено другим способом. Идея Listen (и делегирование событий) состоит в том, чтобы фактически избежать всего копирования событий для новых элементов».
"Вы могли бы просто сделать:"
$('table#foo').listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
"Или даже:"
$.listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
«В первом примере таблица будет использоваться в качестве прослушивателя. Во втором примере используется
<html>
тег. Поэтому независимо от того, добавите ли вы новые таблицы td / tr /. Это все равно будет работать».