मैंने हाल ही में 1.8 से 2.1 तक jQuery का अद्यतन किया है। मुझे अचानक पता चला कि .live()
काम करना बंद कर देता है।
मुझे त्रुटि मिलती है TypeError: $(...).live is not a function
।
क्या ऐसी कोई विधि है जिसका उपयोग मैं कर सकता हूँ .live()
?
मैंने हाल ही में 1.8 से 2.1 तक jQuery का अद्यतन किया है। मुझे अचानक पता चला कि .live()
काम करना बंद कर देता है।
मुझे त्रुटि मिलती है TypeError: $(...).live is not a function
।
क्या ऐसी कोई विधि है जिसका उपयोग मैं कर सकता हूँ .live()
?
जवाबों:
.live()
को 1.9 संस्करण के बाद हटा दिया गया है।इसका मतलब है कि यदि आप संस्करण 1.8 और उससे पहले से अपग्रेड कर रहे हैं, तो आप नीचे दिए गए माइग्रेशन गाइड का पालन नहीं करने पर चीजों को तोड़ने की सूचना देंगे। आप बस के .live()
साथ प्रतिस्थापित नहीं करना चाहिए .on()
!
के लिए त्वरित / गर्म फिक्स एक लाइव साइट पर, नहीं है बस कीवर्ड की जगह live
के साथ on
,
के रूप में पैरामीटर भिन्न !
.live(events, function)
के लिए मैप करना चाहिए:
.on(eventType, selector, function)
(बच्चे) चयनकर्ता बहुत महत्वपूर्ण है! यदि आपको किसी भी कारण से इसका उपयोग करने की आवश्यकता नहीं है, तो इसे सेट करें null
।
इससे पहले:
$('#mainmenu a').live('click', function)
उसके बाद, आप चयनकर्ता a
को बाल तत्व ( ) स्थानांतरित करते हैं .on()
:
$('#mainmenu').on('click', 'a', function)
इससे पहले:
$('.myButton').live('click', function)
बाद में, आप तत्व ( .myButton
) को .on()
चयनकर्ता के पास ले जाते हैं, और निकटतम मूल तत्व (अधिमानतः एक आईडी के साथ) पाते हैं:
$('#parentElement').on('click', '.myButton', function)
यदि आपको नहीं पता कि माता-पिता के रूप में क्या करना है, तो body
हमेशा काम करता है:
$('body').on('click', '.myButton', function)
आप निम्नलिखित जावास्क्रिप्ट कोड को शामिल करके अपने कोड को फिर से बनाने से बच सकते हैं
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
JQuery एपीआई प्रलेखन सूची live()
1.7 के रूप में पदावनत किया गया और संस्करण 1.9: लिंक के रूप में हटा दिया गया ।
संस्करण निकाला गया: 1.7, हटाया गया: 1.9
इसके अलावा यह बताता है:
JQuery 1.7 के रूप में, .live () विधि पदावनत है। ईवेंट हैंडलर संलग्न करने के लिए .on () का उपयोग करें । JQuery के पुराने संस्करणों के उपयोगकर्ताओं को .live () में वरीयता में (।) का उपयोग करना चाहिए
.live()
JQuery के लिए फॉरवर्ड पोर्ट > = 1.9 एविएशन .live()
ऑप्टिमाइज्ड डोम चयनकर्ता संदर्भ पर जेएस पर निर्भरता को प्रतिबिंबित करता है
/**
* Forward port jQuery.live()
* Wrapper for newer jQuery.on()
* Uses optimized selector context
* Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
}
});
}
1.9 में हटा दिया गया था, कृपया अपग्रेड गाइड देखें: http://jquery.com/upgrad-guide/1.9/#lqu-removed
एक बहुत ही सरल सुधार, जिसे आपके कोड को बदलने की आवश्यकता नहीं है, बस jquery माइग्रेशन स्क्रिप्ट जोड़ें, यहाँ डाउनलोड करें https://github.com/jquery/jquery-migrate/
यह "लाइव", "ब्राउज़र" इत्यादि जैसे आवश्यक डेकोरेटेड लेकिन आवश्यक कार्यों की आपूर्ति करता है
यदि आवश्यक न हो तो मैं .on () सिंटैक्स का उपयोग नहीं करता हूं। उदाहरण के लिए आप इस तरह से आसान प्रवास कर सकते हैं:
पुराना:
$('.myButton').live('click', function);
नया:
$('.myButton').click(function)
यहाँ मान्य घटना संचालकों की एक सूची दी गई है: https://api.jquery.com/category/forms/
यदि आप रूबी रेल्स jQuery रत्न पर रूबी का उपयोग कर रहे हैं jquery-rails
और किसी कारण से आप अपने विरासत कोड को रीफ़ैक्टर नहीं कर सकते हैं, तो अंतिम संस्करण जो अभी भी समर्थन करता है 2.1.3
और आप इसे निम्नलिखित सिंटैक्स का उपयोग करके इसे लॉक कर सकते हैं Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
तब आप अद्यतन करने के लिए निम्न कमांड का उपयोग कर सकते हैं:
bundle update jquery-rails
मुझे उम्मीद है कि इसी तरह के मुद्दे का सामना करने में दूसरों की मदद करेंगे।
return this;
समारोह की समाप्ति पर चैनिंग क्षमता को संरक्षित करने के लिए शामिल होना चाहिए