आपको दस्तावेज़ स्तर पर क्लिक ईवेंट को संभालने की आवश्यकता है। ईवेंट ऑब्जेक्ट में, आपके पास एक targetगुण है, आंतरिक-सबसे DOM तत्व जिसे क्लिक किया गया था। इसके साथ आप स्वयं जाँच करें और दस्तावेज़ तत्व तक उसके माता-पिता को चलाएं, यदि उनमें से एक आपका देखा गया तत्व है।
JsFiddle पर उदाहरण देखें
document.addEventListener("click", function (e) {
var level = 0;
for (var element = e.target; element; element = element.parentNode) {
if (element.id === 'x') {
document.getElementById("out").innerHTML = (level ? "inner " : "") + "x clicked";
return;
}
level++;
}
document.getElementById("out").innerHTML = "not x clicked";
});
हमेशा की तरह, यह addEventListener / संलग्नक की वजह से क्रॉस-बैड-ब्राउज़र संगत नहीं है, लेकिन यह इस तरह काम करता है।
एक बच्चे पर क्लिक किया जाता है, जब इवेंट नहीं। टारगेट, लेकिन माता-पिता में से एक यह देखा गया तत्व है (मैं बस इस स्तर की गिनती कर रहा हूं)। क्लॉज़ के लिए हैंडलर को अंदर से वापस नहीं करने के लिए, आपके पास बूलियन संस्करण हो सकता है, यदि तत्व पाया जाता है या नहीं। मेरा उदाहरण केवल इस बात तक सीमित है कि हैंडलर केवल तभी खत्म होता है, जब कुछ भी मेल नहीं खाता है।
क्रॉस-ब्राउज़र संगतता को जोड़ना, मैं आमतौर पर इसे इस तरह से कर रहा हूं:
var addEvent = function (element, eventName, fn, useCapture) {
if (element.addEventListener) {
element.addEventListener(eventName, fn, useCapture);
}
else if (element.attachEvent) {
element.attachEvent(eventName, function (e) {
fn.apply(element, arguments);
}, useCapture);
}
};
यह एक ईवेंट श्रोता / हैंडलर संलग्न करने के लिए क्रॉस-ब्राउज़र संगत कोड है, thisIE में समावेशी पुनर्लेखन , तत्व होने के लिए, जैसे कि jQuery अपने इवेंट हैंडलर के लिए करता है। मन में jQuery के कुछ बिट्स होने के लिए बहुत सारे तर्क हैं;)