Как клонировать событие плагина jQuery Listen? - PullRequest
1 голос
/ 10 декабря 2008

У меня есть несколько элементов <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 () завершается неудачей. Событие click изображения все еще работает нормально.

Вот что Firebug говорит мне:

m(this, e.type) is undefined

... и он ссылается на строку 9 jquery.listen-1.0.3-min.js.

Как я могу заставить событие listen () работать с клонированными элементами?

Обновление

По умолчанию jQuery не копирует события на клонированных элементах, но этот плагин создан для этого.

Между тем, автор плагина listen () предложил другую стратегию - см. Мой ответ ниже.

1 Ответ

1 голос
/ 14 декабря 2008

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

...