Question

J'ai quelques éléments sur ma <tr> page avec un événement attaché à une click() qui est placée à l'intérieur de chacun. J'utilise ce code

$(this).clone(true).appendTo("table#foo");

pour effectuer les opérations suivantes:

  • copier ces s dans une true autre table
  • préserver les événements cliquez sur les images à l'intérieur du s <=> (à cause de l'argument de <=>)

Tout cela fonctionne très bien. Maintenant, j'ai ajouté un jQuery Écouter événement ces s <=>, de sorte qu'un utilisateur doesn « t ont précisément pour objectif:. il / elle peut cliquer partout sur le et je peux <=> passer le clic à l'image

Il est codé comme ceci:

$('tr.record').listen('click','td',function(){
  $(this).parent().find("img.clickable").click();
});

L'listen () événement fonctionne très bien sur l'élément d'origine, mais sur l'élément cloné, l'événement listen () échoue. cliquez sur l'événement de l'image fonctionne toujours très bien.

Voici ce que Firebug me dit:

m(this, e.type) is undefined

... et il fait référence à la ligne 9 de jquery.listen-1.0.3-min.js.

Comment puis-je peux faire le travail de l'événement listen () sur les éléments clonés?

Mise à jour

Par défaut, jQuery ne copie pas les événements sur des éléments clonés, mais ce plugin est fait de le faire.

Pendant ce temps, l'auteur du plugin listen () a proposé une stratégie différente - voir ma réponse ci-dessous

.
Était-ce utile?

La solution

Ariel Flesler, créateur du plugin listen (), m'a donné ce conseil par e-mail:

"Je pense que cela peut être résolu d'une autre manière. L'idée de Listen (et délégation de l'événement) est d'éviter effectivement toute la copie d'événements pour de nouveaux éléments. "

"Vous pouvez simplement faire:"

$('table#foo').listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

"Ou encore:"

$.listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

"Le premier exemple utilisera la table d'écoute. Dans le 2ème, le Tag est utilisé <html>. Donc, peu importe si vous ajoutez td / tr / tables. Ça va toujours. »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top