Как клонировать событие плагина jQuery Listen?

У меня есть несколько <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 () предложил другую стратегию - см. Мой ответ ниже.

10.12.2008 17:58:13
1 ОТВЕТ
РЕШЕНИЕ

Ариэль Флезлер, создатель плагина 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 /. Это все равно будет работать».

1
13.12.2008 22:59:58