Frage

Ich habe einige <tr> Elemente auf meiner Seite mit einem click() Ereignisse an ein Bild angehängt, das in jedem sitzt. Ich benutze diesen Code

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

Sie wie folgt vor:

  • kopieren diese <tr>s in eine andere Tabelle
  • erhalten Sie die Click-Ereignisse auf die Bilder innerhalb der <tr>s (wegen der true Argument)

All das funktioniert gut. Jetzt habe ich hinzugefügt ein jQuery Hören Ereignis auf diese <tr>s, so dass ein Benutzer keine genau zu zielen. er / sie überall auf dem <tr> klicken und ich den Klick auf das Bild gelangen kann

Es ist codiert wie folgt:

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

Das listet () Ereignis funktioniert auf dem ursprünglichen Elemente, aber auf dem geklonten, die hören () Ereignis nicht. Das Click-Ereignis des Bildes noch gut funktioniert.

Hier ist, was Firebug sagt mir:

m(this, e.type) is undefined

... und es verweist Linie 9 von jquery.listen-1.0.3-min.js.

Wie kann ich das hören machen kann () Ereignis Arbeiten an den geklonten Elementen?

Update

In der Standardeinstellung jQuery nicht kopiert Ereignisse auf geklonten Elemente, aber dieses Plugin ist gemacht, das zu tun.

Inzwischen ist der Autor der listen () Plugin vorgeschlagen, eine andere Strategie - siehe meine Antwort unten

.
War es hilfreich?

Lösung

Ariel Flesler, den Schöpfer des listen () Plugin, gab mir diesen Rat per E-Mail:

"Ich denke, dies auf eine andere Weise gelöst werden können. Die Idee von Listen (und Ereignis Delegation) ist, um tatsächlich alle das Kopieren von Ereignissen zu vermeiden, neue Elemente. "

"Man könnte einfach tun:"

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

"Oder auch:"

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

"Das erste Beispiel wird die Tabelle als Hörer verwendet. In der zweiten ein, das <html> Tag wird verwendet. Also egal, ob Sie neue td / tr / Tabellen hinzufügen. Es wird noch arbeiten. "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top