Tôi phải nói nhiều câu trả lời rất thú vị, nhưng gần đây tôi có một vấn đề tương tự và giải pháp cực kỳ đơn giản bằng cách đi theo cách của DOM. Nó khác bởi vì bạn không lặp đi lặp lại mà nhắm trực tiếp vào sự kiện bạn cần, nhưng dưới đây tôi sẽ đưa ra câu trả lời chung chung hơn.
Tôi đã có một hình ảnh liên tiếp:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
Và hình ảnh đó có một trình xử lý sự kiện nhấp vào nó:
imageNode.click(function () { ... });
Ý định của tôi là mở rộng khu vực có thể nhấp vào toàn bộ hàng, vì vậy trước tiên tôi có tất cả hình ảnh và hàng tương đối:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Bây giờ trong dòng anwer thực tế tôi vừa làm như sau, đưa ra câu trả lời cho câu hỏi ban đầu:
tr.click(this.onclick);
Vì vậy, tôi đã tìm nạp trình xử lý sự kiện trực tiếp từ phần tử DOM và đưa nó vào trình xử lý sự kiện nhấp chuột jQuery. Hoạt động như một lá bùa.
Bây giờ, đến trường hợp chung. Trong những ngày tiền jQuery cũ, bạn có thể nhận được tất cả các sự kiện gắn liền với một đối tượng với hai hàm đơn giản nhưng mạnh mẽ được tặng cho người phàm của chúng ta bởi 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;
}
}
});
}