2013-05-06 7 views
31
// this e works 
document.getElementById("p").oncontextmenu = function(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    console.log(target); 
}; 

// this e is undefined 
function doSomething(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    console.log(target); 
} 
<p id="p" onclick="doSomething(e)"> 
    <a href="#">foo</a> 
    <span>bar</span> 
</p> 

कुछ समान प्रश्न पूछे गए हैं।जावास्क्रिप्ट में एक इनलाइन ईवेंट हैंडलर को तर्क के रूप में ईवेंट कैसे पास करें?

लेकिन मेरे कोड में, मैं बच्चे के तत्वों, जो, क्लिक किया गया है a या span की तरह पाने के लिए कोशिश कर रहा हूँ।

तो ईवेंट हैंडलर के लिए तर्क के रूप में event को पास करने का सही तरीका क्या है, या तर्क के बिना हैंडलर के अंदर ईवेंट कैसे प्राप्त करें?

संपादित

मैं addEventListener और jQuery के बारे में पता कर रहा हूँ, inline घटना हाथ के बल्लेबाज को घटना पारित करने के लिए एक समाधान प्रदान करें।

+0

https://developer.mozilla.org/en/docs/DOM/EventTarget.addEventListener –

+4

क्या AddEventListener पर स्विच करने के बजाय इनलाइन ईवेंट हैंडलर का उपयोग करने का कोई अच्छा कारण है? http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Xotic750

उत्तर

58

event वस्तु पारित करने के लिए:

function doSomething(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    console.log(target); 
} 

तत्व में ही पारित करने के लिए (DOMElement):

<p id="p" onclick="doSomething(event);"> 

क्लिक किया चाइल्ड तत्व प्राप्त करने के लिए (event पैरामीटर के साथ प्रयोग किया जाना चाहिए

<p id="p" onclick="doThing(this);"> 

पर लाइव उदाहरण देखें

+5

(और किसी के लिए सोच रहा है: हाँ, यह क्रोम, फ़ायरफ़ॉक्स इत्यादि पर काम करता है, भले ही कुछ [फ़ायरफ़ॉक्स, उदाहरण के लिए] वैश्विक 'ईवेंट नहीं है 'ऑब्जेक्ट। ऐसा इसलिए है क्योंकि जिस संदर्भ में DOM0 हैंडलर को कॉल किया जाता है, उसका' ईवेंट 'ऑब्जेक्ट होता है, भले ही [कुछ ब्राउज़रों पर] यह वैश्विक नहीं है।) –

+0

' यह ''p' को संदर्भित करता है, लेकिन मैं हूं 'a' या' span' – user1643156

+0

@ user1643156 प्राप्त करने का प्रयास कर मैंने –

3

चूंकि इनलाइन घटनाओं को फ़ंक्शंस के रूप में निष्पादित किया जाता है, इसलिए आप तर्क का उपयोग कर सकते हैं।

<p id="p" onclick="doSomething.apply(this, arguments)"> 

और

function doSomething(e) { 
    if (!e) e = window.event; 
    // 'e' is the event. 
    // 'this' is the P element 
} 

'घटना' है कि स्वीकार किए जाते हैं जवाब में बताया गया है वास्तव में तर्क समारोह के लिए पारित का नाम है। वैश्विक घटना के साथ इसका कोई लेना-देना नहीं है।

+0

अच्छी टिप के रूप में नामित किया जाना चाहिए। जब लोग वेब घटक को गोद लेना शुरू करेंगे 'कॉल() 'और' लागू() 'मुख्यधारा जेएस ढांचे में उपलब्ध डेटा बाध्यकारी क्षमताओं को अनुकरण करने में आवश्यक साबित होंगे। एक अतिरिक्त चाल 'ऑब्जेक्ट.साइन' (this.querySelector ('my-btn') के समान कुछ करने के लिए है, यह) एक वेब घटक और voila, डेटा बाध्यकारी के अंदर।आप इनलाइन घटनाओं 'onclick = "toggleBtnActive.call (यह, सत्य)" से मूल वेब घटक वर्ग की किसी भी विधि तक पहुंच सकते हैं। –

संबंधित मुद्दे