javascript - जावास्क्रिप्ट में एक इनलाइन ईवेंट हैंडलर को तर्क के रूप में ईवेंट कैसे पास करें?




events inline (2)

// 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 ईवेंट हैंडर को ईवेंट पास करने के लिए एक समाधान प्रदान करें।


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

<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
}

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


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

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

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

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

तत्व को पास करने के लिए (DOMElement):

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

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








argument-passing