jQuery 1.9 .live () एक फ़ंक्शन नहीं है


242

मैंने हाल ही में 1.8 से 2.1 तक jQuery का अद्यतन किया है। मुझे अचानक पता चला कि .live()काम करना बंद कर देता है।
मुझे त्रुटि मिलती है TypeError: $(...).live is not a function

क्या ऐसी कोई विधि है जिसका उपयोग मैं कर सकता हूँ .live()?

जवाबों:


509

jQuery .live()को 1.9 संस्करण के बाद हटा दिया गया है।

इसका मतलब है कि यदि आप संस्करण 1.8 और उससे पहले से अपग्रेड कर रहे हैं, तो आप नीचे दिए गए माइग्रेशन गाइड का पालन नहीं करने पर चीजों को तोड़ने की सूचना देंगे। आप बस के .live()साथ प्रतिस्थापित नहीं करना चाहिए .on()!


खोज करने और प्रतिस्थापित करने से पहले पढ़ें:

के लिए त्वरित / गर्म फिक्स एक लाइव साइट पर, नहीं है बस कीवर्ड की जगह liveके साथ on,
के रूप में पैरामीटर भिन्न !

.live(events, function)

के लिए मैप करना चाहिए:

.on(eventType, selector, function)

(बच्चे) चयनकर्ता बहुत महत्वपूर्ण है! यदि आपको किसी भी कारण से इसका उपयोग करने की आवश्यकता नहीं है, तो इसे सेट करें null


प्रवासन का उदाहरण 1:

इससे पहले:

$('#mainmenu a').live('click', function)

उसके बाद, आप चयनकर्ता aको बाल तत्व ( ) स्थानांतरित करते हैं .on():

$('#mainmenu').on('click', 'a', function)

प्रवासन का उदाहरण 2:

इससे पहले:

$('.myButton').live('click', function)

बाद में, आप तत्व ( .myButton) को .on()चयनकर्ता के पास ले जाते हैं, और निकटतम मूल तत्व (अधिमानतः एक आईडी के साथ) पाते हैं:

$('#parentElement').on('click', '.myButton', function)

यदि आपको नहीं पता कि माता-पिता के रूप में क्या करना है, तो bodyहमेशा काम करता है:

$('body').on('click', '.myButton', function)

यह सभी देखें:


56

आप निम्नलिखित जावास्क्रिप्ट कोड को शामिल करके अपने कोड को फिर से बनाने से बच सकते हैं

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});

3
return this;समारोह की समाप्ति पर चैनिंग क्षमता को संरक्षित करने के लिए शामिल होना चाहिए
गुरिल्ला

क्या इसका उपयोग करने से भविष्य में कोई समस्या होगी?
इस्लाम एलशोबोक्शी 10

15

JQuery एपीआई प्रलेखन सूची live()1.7 के रूप में पदावनत किया गया और संस्करण 1.9: लिंक के रूप में हटा दिया गया ।

संस्करण निकाला गया: 1.7, हटाया गया: 1.9

इसके अलावा यह बताता है:

JQuery 1.7 के रूप में, .live () विधि पदावनत है। ईवेंट हैंडलर संलग्न करने के लिए .on () का उपयोग करें । JQuery के पुराने संस्करणों के उपयोगकर्ताओं को .live () में वरीयता में (।) का उपयोग करना चाहिए


आगे संगत संस्करण का उल्लेख करने के लिए धन्यवाद: .भारत ()
एडवर्ड ओलिमिसन २०'१४ को १

13

.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);
          }
      }
  });
}

यह मेरे मामले के लिए सुपर फाइन का काम करता है: jQuery 1.11.2 पर अनिवार्य रूप से काम करने के लिए मिला। धन्यवाद!
vcoppolecchia

5

.live () को हटा दिया गया था और अब jQuery 1.9 से हटा दिया गया है। आपको (.on) का उपयोग करना चाहिए।



5

एक बहुत ही सरल सुधार, जिसे आपके कोड को बदलने की आवश्यकता नहीं है, बस jquery माइग्रेशन स्क्रिप्ट जोड़ें, यहाँ डाउनलोड करें https://github.com/jquery/jquery-migrate/

यह "लाइव", "ब्राउज़र" इत्यादि जैसे आवश्यक डेकोरेटेड लेकिन आवश्यक कार्यों की आपूर्ति करता है


2

यदि आवश्यक न हो तो मैं .on () सिंटैक्स का उपयोग नहीं करता हूं। उदाहरण के लिए आप इस तरह से आसान प्रवास कर सकते हैं:

पुराना:

$('.myButton').live('click', function);

नया:

$('.myButton').click(function)

यहाँ मान्य घटना संचालकों की एक सूची दी गई है: https://api.jquery.com/category/forms/


3
मुझे लगता है कि .on () सिंटैक्स की आवश्यकता केवल गतिशील रूप से भरी हुई सामग्री के लिए है (उदाहरण के लिए, पृष्ठ लोड होने के बाद जोड़े गए तत्व)।
T30

1

यदि आप रूबी रेल्स jQuery रत्न पर रूबी का उपयोग कर रहे हैं jquery-railsऔर किसी कारण से आप अपने विरासत कोड को रीफ़ैक्टर नहीं कर सकते हैं, तो अंतिम संस्करण जो अभी भी समर्थन करता है 2.1.3और आप इसे निम्नलिखित सिंटैक्स का उपयोग करके इसे लॉक कर सकते हैं Gemfile:

gem 'jquery-rails', '~> 2.1', '= 2.1.3'

तब आप अद्यतन करने के लिए निम्न कमांड का उपयोग कर सकते हैं:

bundle update jquery-rails

मुझे उम्मीद है कि इसी तरह के मुद्दे का सामना करने में दूसरों की मदद करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.