मुझे कहना है कि कई उत्तर दिलचस्प हैं, लेकिन हाल ही में मुझे एक समान समस्या थी और डीओएल के रास्ते से समाधान बेहद सरल था। यह अलग है क्योंकि आप इसे पुनरावृत्त नहीं करते हैं, लेकिन सीधे उस घटना पर लक्ष्य बनाते हैं जिसकी आपको आवश्यकता है, लेकिन नीचे मैं अधिक सामान्य उत्तर दूंगा।
मेरे पास एक पंक्ति में एक छवि थी:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
और उस छवि पर एक क्लिक ईवेंट हैंडलर जुड़ा हुआ था:
imageNode.click(function () { ... });
मेरा इरादा क्लिक करने योग्य क्षेत्र को पूरी पंक्ति में विस्तारित करना था, इसलिए मुझे पहली बार सभी छवियां और रिश्तेदार पंक्तियां मिलीं:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
अब वास्तविक एवेन्यू लाइन में मैंने मूल प्रश्न का उत्तर देते हुए इस प्रकार किया:
tr.click(this.onclick);
इसलिए मैंने इवेंट हैंडलर को सीधे DOM एलिमेंट से लिया और jQuery क्लिक इवेंट हैंडलर में डाल दिया। एक जादू की तरह काम करता है।
अब, सामान्य मामले में। पुराने प्री-jQuery दिनों में आप दो साधारण अभी तक शक्तिशाली कार्यों के साथ एक वस्तु से जुड़ी सभी घटनाओं को प्राप्त कर सकते हैं, जो हमें डगलस क्रॉकफोर्ड द्वारा नश्वर के लिए उपहार में दिए गए हैं :
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;
}
}
});
}