मेरे पास जावास्क्रिप्ट है कि लोग अपने पृष्ठ में शामिल हैं। मेरे जावास्क्रिप्ट में मेरे पास jQuery का एक संस्करण है (आसान संदर्भ के लिए 1.8) जिसे अपने नामस्थान में विभाजित किया गया है, और वैश्विक चर के माध्यम से संदर्भित किया गया है (लेकिन "$" या "jQuery" के दो डिफ़ॉल्ट वर्रों में से एक नहीं) । यह उपयोगकर्ताओं को अपने पृष्ठ में jQuery रखने की अनुमति देता है और यह उन कार्यों के साथ हस्तक्षेप नहीं करता है जो मैं अपने कार्यों में आंतरिक रूप से कर रहा हूं।घटनाओं को जोड़ने के क्रम में ध्यान दिए बिना, आप अपने जावास्क्रिप्ट ईवेंट को पहले चलाने के लिए कैसे मजबूर करते हैं?
तो हमारे पास एक पृष्ठ है जिसमें पहले से ही jQuery (1.4) है, और सबकुछ ठीक काम करता है, सिवाय इसके कि उपयोगकर्ता और मेरा कोड दोनों तत्वों पर "क्लिक" ईवेंट सुन रहे हैं, और उनके पहले कुछ चल रहे हैं, इसलिए कुछ वे घटनाएं जो झूठी वापसी करती हैं, jQuery प्रचार को रोकता है और मेरी घटना कभी भी ट्रिगर नहीं होती है। मुझे पहले जाने के लिए मेरी घटना की ज़रूरत है। उपयोगकर्ता अभी भी काम करने के लिए मेरी ऑनक्लिक कार्यक्षमता की अपेक्षा कर रहा है।
अब मुझे पता है कि jQuery _data() ऑब्जेक्ट के माध्यम से आंतरिक रूप से घटनाओं का अपना क्रम रखता है, और इसके माध्यम से मौजूदा घटनाओं को बाधित करना संभव है, मेरी घटना को बांधना, फिर मौजूदा घटनाओं को दोबारा जोड़ना, लेकिन यह केवल वस्तुओं पर लागू होता है jQuery के उस उदाहरण के माध्यम से बाध्य। मैं अपेक्षा करता हूं कि jQuery की ऑब्जेक्ट को अंधाधुंध रूप से देखने की उम्मीद न हो कि संघर्ष को उपयोगकर्ता के अपने स्वयं के संस्करण द्वारा प्रस्तुत किया गया था। आखिरकार क्या होता है जब कोई उपयोगकर्ता jQuery के माध्यम से ईवेंट को बाध्य नहीं करता है? पृष्ठ में मौजूदा jQuery ऑब्जेक्ट में हेरफेर करने का प्रयास करना एक अच्छा समाधान नहीं है।
मुझे पता है कि, ब्राउज़र के आधार पर, वे addEventListener/removeEventListener या attachEvent/detachEvent का उपयोग कर रहे हैं। अगर केवल मुझे पहले से जोड़े गए ईवेंट की एक सूची मिल सकती है, तो मैं उन्हें जिस क्रम में चाहता था उसे पुनर्जीवित कर सकता था, लेकिन मुझे यह नहीं पता कि कैसे। क्रोम निरीक्षण के माध्यम से डोम के माध्यम से देखकर मुझे कहीं भी बाध्य नहीं देखा जाता है (वस्तु पर नहीं, खिड़की या दस्तावेज पर नहीं)।
मुझे बस इतना ही पता लगाने की कोशिश कर रहा है कि jQuery कहां से सुनता है। अपने स्वयं के कार्यक्रमों के क्रम को नियंत्रित करने में सक्षम होने के लिए, jQuery को कंबल से कहीं और सुनना चाहिए और फिर अपने कार्यों को सही तरीके से बंद करना चाहिए? अगर मैं यह पता लगा सकता हूं कि यह कहां किया गया है, तो मुझे यह सुनिश्चित करने में कुछ अंतर्दृष्टि मिल सकती है कि मेरी घटना हमेशा पहले होती है। या शायद कुछ जावास्क्रिप्ट एपीआई है जो मैं Google पर नहीं ढूंढ पा रहा हूं।
कोई सुझाव? फिर अपने घटना बाध्य करने के लिए
$.fn.bindFirst = function(name, fn) {
var elem, handlers, i, _len;
this.bind(name, fn);
for (i = 0, _len = this.length; i < _len; i++) {
elem = this[i];
handlers = jQuery._data(elem).events[name.split('.')[0]];
handlers.unshift(handlers.pop());
}
};
,:
$(".foo").bindFirst("click", function() { /* Your handler */ });
आसान peasy
नहीं, डीओएम से 'addEventListener' द्वारा आयोजित घटनाओं को प्राप्त करना संभव नहीं है। आपके पास एकमात्र संदर्भ है जो jQuery की 'डेटा' ऑब्जेक्ट है। – Bergi
बीटीडब्ल्यू, "जादू" होता है [यहां] (https://github.com/jquery/jquery/blob/master/src/event.js#L93) – Bergi
उपयोगकर्ता ईवेंट प्रचार क्यों रोक रहे हैं? –