Saya harus mengatakan banyak jawaban yang menarik, tetapi baru-baru ini saya memiliki masalah yang sama dan solusinya sangat sederhana dengan menggunakan cara DOM. Ini berbeda karena Anda tidak mengulangi tetapi mengarahkan langsung pada acara yang Anda butuhkan, tetapi di bawah ini saya akan memberikan jawaban yang lebih umum.
Saya memiliki gambar berturut-turut:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
Dan gambar itu memiliki pengendali event klik yang melekat padanya:
imageNode.click(function () { ... });
Tujuan saya adalah untuk memperluas area yang dapat diklik ke seluruh baris, jadi saya pertama kali mendapatkan semua gambar dan baris relatif:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Sekarang di baris anwer yang sebenarnya saya lakukan sebagai berikut, memberikan jawaban untuk pertanyaan awal:
tr.click(this.onclick);
Jadi saya mengambil event handler langsung dari elemen DOM dan memasukkannya ke event handler klik jQuery. Bekerja seperti pesona.
Sekarang, untuk kasus umum. Di masa pra-jQuery dulu, Anda bisa membuat semua acara terlampir pada objek dengan dua fungsi sederhana namun kuat yang diberikan kepada kita manusia oleh 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;
}
}
});
}