मुझे अंतर समझ में नहीं आता, वे दोनों एक जैसे लगते हैं लेकिन मुझे लगता है कि वे नहीं हैं।
एक या दूसरे का उपयोग कब करना है, इसके किसी भी उदाहरण की सराहना की जाएगी।
मुझे अंतर समझ में नहीं आता, वे दोनों एक जैसे लगते हैं लेकिन मुझे लगता है कि वे नहीं हैं।
एक या दूसरे का उपयोग कब करना है, इसके किसी भी उदाहरण की सराहना की जाएगी।
जवाबों:
बेन अपने जवाब में पूरी तरह से सही है - इसलिए वह जो कहता है उसे ध्यान में रखें। मैं आपको जो बताने जा रहा हूं वह पूर्ण विवरण नहीं है, लेकिन यह याद रखने का एक बहुत आसान तरीका है e.target
, e.currentTarget
माउस घटनाओं और प्रदर्शन सूची के संबंध में काम करना:
e.target
= माउस के नीचे की चीज (जैसा कि बेन कहता है ... वह चीज जो घटना को ट्रिगर करती है)।
e.currentTarget
= डॉट से पहले की बात ... (नीचे देखें)
तो अगर आपके पास क्लिप के अंदर 10 बटन हैं, जिसमें "बीटीएन" का नाम है और आप ऐसा करते हैं:
btns.addEventListener(MouseEvent.MOUSE_OVER, onOver);
// btns = the thing before the dot of an addEventListener call
function onOver(e:MouseEvent):void{
trace(e.target.name, e.currentTarget.name);
}
e.target
10 बटनों में से एक e.currentTarget
होगा और हमेशा "बीटीएन" क्लिप होगा।
यह ध्यान देने योग्य है कि यदि आपने माउस को एक ROLL_OVER में बदल दिया है या संपत्ति btns.mouseChildren
को गलत पर सेट किया है , e.target
और e.currentTarget
दोनों हमेशा "बीटीएन" होंगे।
currentTarget
हमेशा घटना के लिए सुनने वाली वस्तु है; target
वह वास्तविक लक्ष्य है जिसे घटना प्राप्त हुई है। ईवेंट बबलिंग के अनुसार, लक्ष्य ईवेंट प्राप्त करता है और यह डिस्प्ले लिस्ट को बुलबुले बना देता है। (या इवेंट कैप्चरिंग के लिए दूसरा रास्ता)
e.target
वह है जो ट्रिगर करने के लिए घटना डिस्पैचर चलाता है और e.currentTarget
वह है जो आपने अपने श्रोता को सौंपा है।
मुझे विजुअल जवाब पसंद हैं।
जब आप क्लिक करते हैं #btn
, तो दो ईवेंट हैंडलर्स को कॉल किया जाता है और वे उस आउटपुट को आउटपुट करते हैं जो आप चित्र में देखते हैं।
यहाँ डेमो: https://jsfiddle.net/ujhe1key/
यह ध्यान देने योग्य है कि event.target उपयोगी हो सकता है, उदाहरण के लिए, विभिन्न कार्यों को ट्रिगर करने के लिए एकल श्रोता का उपयोग करने के लिए। मान लें कि आपके पास विशिष्ट "मेनू" है, जिसमें 10 बटन अंदर हैं, ऐसा करने के बजाय:
menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...
आप बस कर सकते हैं:
menu.addEventListener(MouseEvent.CLICK, doAction);
और doAction (घटना) के आधार पर event.target (यह नाम संपत्ति का उपयोग करके, आदि ...) के आधार पर एक अलग कार्रवाई को ट्रिगर करें
एक उदाहरण बनाओ:
var body = document.body,
btn = document.getElementById( 'id' );
body.addEventListener( 'click', function( event ) {
console.log( event.currentTarget === body );
console.log( event.target === btn );
}, false );
जब आप 'btn' पर क्लिक करते हैं, और 'true' और 'true' दिखाई देगा!
e.currentTarget हमेशा उस घटक को लौटाएगा जिस पर ईवेंट श्रोता जोड़ा गया है।
दूसरी ओर, ई। टार्गेट स्वयं या किसी प्रत्यक्ष बच्चे या भव्य बच्चे या ग्रैंड-ग्रैंड-चाइल्ड हो सकते हैं और इसी तरह से घटना को किसने प्राप्त किया। दूसरे शब्दों में, e.target घटक को प्रदर्शित करता है जो प्रदर्शन सूची पदानुक्रम में शीर्ष पर है और बाल पदानुक्रम या घटक में ही होना चाहिए।
एक उपयोग तब हो सकता है जब आपके पास कैनवस में कई चित्र हों और आप चित्र को घटक के अंदर खींचना चाहते हों लेकिन कैनवस। आप कैनवस पर एक श्रोता जोड़ सकते हैं और उस श्रोता में आप यह सुनिश्चित करने के लिए निम्नलिखित कोड लिख सकते हैं कि कैनवस घसीटा नहीं जाएगा।
function dragImageOnly(e:MouseEvent):void
{
if(e.target==e.currentTarget)
{
return;
}
else
{
Image(e.target).startDrag();
}
}
target is the element that triggered the event (e.g., the user clicked on)
currenttarget is the element that the event listener is attached to.
यदि आप बटन के चाइल्ड एलिमेंट पर क्लिक करते हैं, तो बटन विशेषताओं का पता लगाने के लिए करंटटार्ग का उपयोग करना बेहतर है, सीएच में कभी-कभी ई-कॉमर्स का उपयोग करने की समस्या।