TypeError: jQuery फ़ंक्शन को कॉल करते समय $ एक फ़ंक्शन नहीं है


214

मेरे पास वर्डप्रेस प्लगइन में एक सरल jQuery स्क्रिप्ट है जो इस तरह से jQuery आवरण का उपयोग कर रहा है:

$(document).ready(function(){

    // jQuery code is in here

});

मैं वर्डप्रेस डैशबोर्ड के भीतर से इस स्क्रिप्ट को कॉल कर रहा हूं और इसे लोड कर रहा हूं और बाद में jQuery फ्रेमवर्क लोड हो गया है।

जब मैं फायरबग में पृष्ठ की जांच करता हूं तो मैं लगातार त्रुटि संदेश प्राप्त करता रहता हूं:

TypeError: $ एक फ़ंक्शन नहीं है

$ (Document) .ready (function () {

क्या मुझे इस समारोह में स्क्रिप्ट को लपेटना चाहिए:

(function($){

    // jQuery code is in here

})(jQuery);

मुझे यह त्रुटि काफी बार हुई है और मुझे यकीन नहीं है कि इसे कैसे संभालना है।

किसी भी तरह की सहायता का स्वागत किया जाएगा।


3
यदि आप $कंसोल में टाइप करते हैं और एंटर दबाते हैं - तो आप क्या देखते हैं?
23

कंसोल में $ दौड़ते समय मुझे "अपरिभाषित" प्राप्त होता है
जेसन

जवाबों:


320

डिफ़ॉल्ट रूप से जब आप वर्डप्रेस में jQuery का उपयोग करते हैं तो आपको इसका उपयोग करना चाहिए jQuery, और $इसका उपयोग नहीं किया जाता है (यह अन्य पुस्तकालयों के साथ संगतता के लिए है)।

इसे लपेटने का आपका समाधान functionठीक काम करेगा, या आप किसी अन्य तरीके से jQuery को लोड कर सकते हैं (लेकिन यह शायद Wordpress में एक अच्छा विचार नहीं है)।

यदि आपको उपयोग करना चाहिए document.ready, तो आप वास्तव $में फ़ंक्शन कॉल में पास कर सकते हैं :

jQuery(function ($) { ...

मैं दूसरे संस्करण की कोशिश की, हालांकि यह काम नहीं किया, पहला संस्करण किया था, लेकिन मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि मैं jQuery को कॉल करने पर दोगुना नहीं हूं।
जेसन

@ जेसन आपको इसकी आवश्यकता भी नहीं है; बस ठीक यही मैंने पोस्ट किया: jsfiddle.net/vcbYJ
धमाका गोलियां

क्या आप इस प्रश्न को देख सकते हैं wordpress.stackexchange.com/questions/214858/…

और अगर कोई चयनकर्ता बाहर है jQuery(function ($) { ..., तो आपको jQueryइसके बजाय का उपयोग करना होगा$
मिशा रूद्रस्थ

धन्यवाद भाई। इसकी सराहना करें
डेस जूल

154

इसे ठीक करना चाहिए:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

सीधे शब्दों में कहें, वर्डप्रेस अपनी स्क्रिप्टिंग को आपके चलने से पहले चलाता है और वे $var को रिलीज़ करते हैं ताकि यह अन्य पुस्तकालयों से न टकराए। यह कुल समझ में आता है, क्योंकि वर्डप्रेस का उपयोग सभी प्रकार की वेब साइटों, ऐप्स और निश्चित रूप से, ब्लॉग्स के लिए किया जाता है।

उनके प्रलेखन से:

वर्डप्रेस के साथ शामिल jQuery पुस्तकालय noConflict () मोड पर सेट है (देखें wp- शामिल / js / jquery / jquery.js)। यह अन्य जावास्क्रिप्ट पुस्तकालयों के साथ संगतता समस्याओं को रोकने के लिए है जिसे वर्डप्रेस लिंक कर सकता है।

NoConflict () मोड में, jQuery के लिए वैश्विक $ शॉर्टकट उपलब्ध नहीं है ...


28

इस समाधान ने मेरे लिए काम किया

;(function($){
    // your code
})(jQuery);

अपने कोड को बंद करने के अंदर ले जाएं और $इसके बजाय उपयोग करेंjQuery

मैंने उपरोक्त समाधान /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma में पाया।

... बहुत खोज करने के बाद


2
विलक्षण समाधान। मुख्य कारण यह काम करता है क्योंकि ";" पहले से ही सक्रिय jquery के किसी भी अन्य उदाहरण को बंद कर देता है और एक ही समय में यह स्थानीय रूप से एक और नया घोषित करता है। जब आपके पास उत्पादन में लेआउट को लागू करने के लिए बस कुछ सेकंड होते हैं या बहुत सारे और वर्डप्रेस प्लग इन चल रहे होते हैं तो यह बहुत अच्छा कर सकता है। लेकिन, ध्यान रखें कि आपको समस्या को ठीक करना चाहिए, यह सिर्फ एक बैंड-सहायता है, लेकिन यदि यह एक सूचना पृष्ठ है तो यह ठीक है।
luis

@ मर्था जेम्स यह मेरे लिए काम करता है इसलिए इसमें शामिल है। यह दूसरों के लिए काम कर सकता है या नहीं कर सकता है
बिक्रम श्रेष्ठ

19

आप इस तरह के भ्रम से बच सकते हैं

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

7
या $ = jQuery.noConflict ();
Cyssoo



8

आपको फंक्शन में $ पास करना होगा ()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

3
यह ऊपर दिए गए उत्तर (तीन साल से पहले) से कैसे अलग है?
रनवीस


7

अपने jQuery संदर्भों को दोबारा जांचें। यह संभव है कि आप या तो इसे एक से अधिक बार संदर्भित कर रहे हैं या आप अपने फ़ंक्शन को बहुत जल्दी बुला रहे हैं (इससे पहले कि jQuery परिभाषित हो)। आप मेरी टिप्पणियों के अनुसार कोशिश कर सकते हैं और अपनी फ़ाइल के शीर्ष पर (सिर में) कोई भी jQuery संदर्भ डाल सकते हैं और देखें कि क्या मदद करता है।

यदि आप jQuery के इनकैप्सुलेशन का उपयोग करते हैं तो इस मामले में मदद नहीं करनी चाहिए। कृपया इसे आज़माएं क्योंकि मुझे लगता है कि यह पूर्ववर्ती और अधिक स्पष्ट है, लेकिन अगर jQuery को परिभाषित नहीं किया गया है तो आपको वही त्रुटियां मिलेंगी।

अंत में ... jQuery वर्तमान में परिभाषित नहीं है।


मुझे लगता है कि इसके बजाय कुछ ऐसा है जो परिभाषित करने से पहले JQuery तक पहुंचने की कोशिश करता है जो बदले में सब कुछ तोड़ देता है। अपने शीर्ष के scriptसंदर्भ JQueryको स्थानांतरित करने का प्रयास करें index.htmlऔर यह संभवतः काम करेगा
डैन मोल्दोवन

इस उत्तर को अधिक दृश्यता की आवश्यकता है। हां, यदि मानक नेमस्पेस को किसी अन्य प्लगइन के जरिए लोड किए गए jQuery के संस्करण के साथ लिया गया है, तो अन्य मान्य हैं। लेकिन चेक करें कि आप अनजाने में (और संभवतः अनावश्यक रूप से) एक से अधिक बार jQuery लोड नहीं कर रहे हैं।
edkay

6

इसके अलावा, मुझे jQuery noConflict मोड का उपयोग करने के लिए अच्छा समाधान मिल गया है।

(function($){

  $(document).ready(function(){
      // write code here
  });

  // or also you can write jquery code like this

  jQuery(document).ready(function(){
      // write code here
  });

})(jQuery);

इसका समाधान मुझे यहां से मिला। https://thecodingstuff.com/how-to-properly-use-jquery-noconflict-mode-in-wordpress/


5

उपयोग

jQuery(document).

के बजाय

$(document).

या

फ़ंक्शन के भीतर, jQuery के लिए $ अंक, जैसा कि आप उम्मीद करेंगे

(function ($) {
   $(document).
}(jQuery));

4

मेरे लिए क्या काम किया। आयात करने वाला पहला पुस्तकालय क्वेरी लाइब्रेरी है और सही तब jQuery.noConflict () विधि को कॉल करें।

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>


3
<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

    $(document).ready(readyFn); 
    })(jQuery);

अब jQuery के स्थान पर jq का उपयोग करें


3

आप इस मुद्दे पर आते हैं जब आपका फ़ंक्शन नाम और फ़ाइल में आईडी नामों में से एक समान होता है। बस सुनिश्चित करें कि फ़ाइल में आपके सभी आईडी नाम अद्वितीय हैं।


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