Ich muss sagen, dass viele der Antworten interessant sind, aber vor kurzem hatte ich ein ähnliches Problem und die Lösung war extrem einfach, indem ich den DOM-Weg ging. Es ist anders, weil Sie nicht iterieren, sondern direkt auf das Ereignis zielen, das Sie benötigen, aber im Folgenden werde ich eine allgemeinere Antwort geben.
Ich hatte ein Bild in einer Reihe:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
Und dieses Bild war mit einem Click-Event-Handler versehen:
imageNode.click(function () { ... });
Meine Absicht war es, den anklickbaren Bereich auf die gesamte Zeile auszudehnen, also habe ich zunächst alle Bilder und relativen Zeilen erhalten:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Jetzt im eigentliche Antwort Zeile habe ich soeben eine Antwort auf die ursprüngliche Frage gegeben:
tr.click(this.onclick);
Also habe ich den Event-Handler direkt aus dem DOM-Element geholt und ihn in den jQuery-Klick-Event-Handler gesetzt. Funktioniert wie ein Charme.
Nun zum allgemeinen Fall. In den alten Tagen vor jQuery konnte man alle Ereignisse, die mit einem Objekt verbunden waren, mit zwei einfachen, aber mächtigen Funktionen erhalten, die uns Sterblichen von Douglas Crockford :
function walkTheDOM(node, func)
{
func(node);
node = node.firstChild;
while (node)
{
walkTheDOM(node, func);
node = node.nextSibling;
}
}
function purgeEventHandlers(node)
{
walkTheDOM(node, function (n) {
var f;
for (f in n)
{
if (typeof n[f] === "function")
{
n[f] = null;
}
}
});
}
5 Stimmen
Unglücklicherweise, jetzt: bugs.jquery.com/ticket/10589
2 Stimmen
Unterstützen sowohl jQuery vor als auch nach 1.8:
var events = (jQuery._data || jQuery.data)(elem, 'events');
3 Stimmen
Beachten Sie, dass Sie die Dev-Tools von FF und Chrome (F12) verwenden können, um diese Ereignis-Listener zu sehen. Siehe developers.google.com/web/tools/chrome-devtools/debug/ y developer.mozilla.org/de-US/docs/Tools/Page_Inspector/How_to/