तो, आप कुछ निश्चित परिस्थितियों में कुछ हासिल कर सकते हैं जैसे आप पूरा कर सकते हैं। विशेष रूप से, अगर
- आप मूल
- से पहले अपने स्वयं के कस्टम जावास्क्रिप्ट लोड कर सकते हैं तुम्हें पता है कि आप किन तत्वों दूसरों
प्रभावी ढंग पर घटनाओं फेंक के लिए सुन रहे हैं, आप क्या मूल की जगह है लक्ष्य तत्व पर addEventListener विधि जो एक कस्टम को कॉल करता है जो कॉल को रोकता है, कुछ विशेष प्रसंस्करण करता है, और फिर इसे प्रति सामान्य जारी रखने देता है। यह 'विशेष प्रसंस्करण' एक नया फ़ंक्शन है जो मूल कॉलबैक को लपेटता है, और कुछ राज्यों के साथ ईवेंट तर्कों को चिह्नित करता है ताकि आपको किसी और को पहले से ही ईवेंट को संभाला जा सके।
<div id='asdf'>asdf</div>
जावास्क्रिप्ट:
var target = document.getElementById('asdf');
var original = target.addEventListener;
var updated = function(){
// Grab the original callback, so we can use it in our wrapper
var originalFunc = arguments[1];
// Create new function for the callback, that lets us set a state letting us know it has been handled by someone
// Finish the callback by executing the original callback
var newFunc = function(e){
console.log('haha, intercepted you');
e.intercepted = true;
originalFunc.call(this, e);
};
// Set the new function in place in the original arguments 'array'
arguments[1] = newFunc;
// Perform the standard addEventListener logic with our new wrapper function
original.apply(this, arguments);
};
// Set the addEventListener on our target to our modified version
target.addEventListener = updated;
// Standard event handling
target.addEventListener('click', function(e){
console.log('original click');
console.log('intercepted?', e.intercepted);
})
क्लिक ईवेंट जो आप बाध्य होने पर नियंत्रण नहीं रखते हैं? –
मैं वास्तव में नहीं जान सकता, क्योंकि यह एक पुस्तकालय का हिस्सा है जिसका उपयोग विभिन्न प्रकार के पृष्ठों के साथ किया जा सकता है। AddEventListener या onXXX हो सकता है। – Grodriguez
हाँ, 'addEventListener' इसे कठिन बनाता है। [घटना] प्रकारों के लिए, आप इसे प्राप्त कर सकते हैं ताकि दस्तावेज से जुड़ा आपका हैंडलर 'e.target' से शुरू होता है, और इसे और उसके पूर्वजों को यह देखने के लिए परीक्षण करता है कि किसके पास हैंडलर था, फिर उसे उस फ़ंक्शन से लपेटें जो कॉल करता है 'stopPropagation'। लेकिन 'addEventListener' आपको ऐसा करने नहीं देगा। –