"क्वेरी फ़ंक्शन Select2 अपरिभाषित त्रुटि के लिए परिभाषित नहीं है"


121

Select2 का उपयोग करने की कोशिश कर रहा है और कई आइटम इनपुट / टेक्स्ट फ़ील्ड पर यह त्रुटि प्राप्त कर रहा है:

"query function not defined for Select2 undefined error"

जवाबों:


241

इस Google समूह थ्रेड में शामिल किया गया है

समस्या अतिरिक्त div की वजह से थी जो कि चयन 2 द्वारा जोड़ी जा रही थी। Select2 ने वर्ग "select2-container form-select" के साथ नया div जोड़ा था जो चुने गए को लपेटने के लिए था। इसलिए अगली बार जब मैंने फ़ंक्शन लोड किया, तो त्रुटि को फेंक दिया जा रहा था क्योंकि select2 को div एलिमेंट से अटैच किया जा रहा था। मैंने अपना चयनकर्ता बदल लिया ...

विशिष्ट टैग नाम "चयन" के साथ उपसर्ग select2 css पहचानकर्ता:

$('select.form-select').select2();

किसी तरह यह मेरे लिए तय किया, मेरे मामले में मैं फार्म इनपुट की एक पंक्ति क्लोनिंग कर रहा था जिसमें select2-ified चुनिंदा मेनू शामिल थे और सभी प्रकार के अजीब सामान पहले क्लोन के बाद हो रहे थे।
Martincarlin87

साथ ही अंदर होना है$(document).ready(function() { $('select.form-select').select2()})
TED

1
कोणीय यूआई सेलेक्ट 2 निर्देश में एक ही समस्या को कैसे हल किया जा सकता है?
zavidovych

बस आज वही समस्या सामने आई - हालाँकि पहले समान कोड में कोई समस्या नहीं थी (शायद select2 का अपडेट?)। वैसे भी, यह मेरे लिए इसे हल कर दिया और फिर से ठीक काम कर रहा है। बहुत बढ़िया जवाब!
user756659

10
यह समस्या आमतौर पर होती है यदि चयन नियंत्रण पहले से ही .select2({})विधि द्वारा प्रारंभ किया गया है। एक बेहतर समाधान पहले विध्वंस विधि को कॉल करना होगा। Ex:$("#mySelectControl").select2("destroy").select2({});
दिमित्री एस।

18

यह त्रुटि संदेश बहुत सामान्य है। इसके अन्य संभावित स्रोतों में से एक यह है कि आप select2()पहले से ही "select2ed" इनपुट पर कॉल करने की कोशिश कर रहे हैं ।


13

मामले में आप एक खाली इनपुट इनिशियलाइज़ करते हैं:

$(".yourelement").select2({
 data: {
  id: "",
  text: ""
 }
});

नीचे पहली टिप्पणी पढ़ें, यह बताता है कि आपको मेरे उत्तर में कोड का उपयोग क्यों और कब करना चाहिए।


2
मुझे यह समस्या तब हुई जब मैंने एक वास्तविक चयन तत्व से इनपुट प्रकार = छिपे तत्व के लिए एक चयनित 2 बॉक्स को माइग्रेट किया जिसे मैं बाद में पॉपुलेट कर रहा था। Select2 कोड के माध्यम से कदम रखने में, यह त्रुटि डाली जाती है क्योंकि इसमें कोई क्वेरी, अजाक्स, डेटा या मूल्य मान पारित नहीं हुआ है।
डैनियल

1
इस प्रश्न के लिए स्वीकृत उत्तर होना चाहिए। यह निश्चित नहीं है कि select2()सिर्फ खाली मापदंडों को क्यों स्वीकार नहीं किया जाएगा
स्वदेव

11

मुझे भी यह समस्या थी कि आप दो बार select2 को इनिशियलाइज़ न करें।


मेरे लिए भी वही, लेकिन त्रुटि मेरे लिए कोई समस्या नहीं थी। s2 वैसे भी काम करता है
Reign.85

यह कैसे करना है?
खालिद सालेह

7

मेरे लिए यह समस्या सही डेटा-यूआई-चयन 2 विशेषता सेट करने के लिए उबला हुआ है:

<input type="text" data-ui-select2="select2Options.projectManagers" placeholder="Project Manager" ng-model="selectedProjectManager">


$scope.projectManagers = { 
  data: []  //Must have data property 
}

$scope.selectedProjectManager = {};

यदि मैं इस त्रुटि को प्राप्त करने dataपर संपत्ति को हटा देता $scope.projectManagersहूं।


5

यह समस्या उबली हुई थी कि मैं अपने चयन 2 चयन बॉक्स का निर्माण कैसे कर रहा था। एक जावास्क्रिप्ट फ़ाइल में मैं था ...

$(function(){
  $(".select2").select2();
});

और एक अन्य जेएस में एक ओवरराइड फ़ाइल ...

$(function(){
    var employerStateSelector = 
                $("#registration_employer_state").select2("destroy");
    employerStateSelector.select2({
    placeholder: 'Select a State...'
    });
});

विंडो लोड ईवेंट में दूसरा ओवरराइड ले जाने से समस्या हल हो गई।

$( window ).load(function() {
  var employerStateSelector = 
              $("#registration_employer_state").select2("destroy");
  employerStateSelector.select2({
    placeholder: 'Select a State...'
  });
});

यह समस्या एक रेल अनुप्रयोग के अंदर खिल गई


4

मैं भी एक ही त्रुटि जब एक पाठ बॉक्स के साथ ajax का उपयोग कर रहा हूँ तो मैं इसे textbox के वर्ग select2 को हटाने और आईडी द्वारा select2 सेटअप की तरह से हल:

$(function(){
  $("#input-select2").select2();
});

3

ऐसा लगता है कि आपका चयनकर्ता एक अपरिभाषित तत्व लौटाता है (इसलिए undefined errorवापस आ गया है)

यदि तत्व वास्तव में मौजूद है, तो आप select2 को inputकुछ भी आपूर्ति किए बिना एक तत्व पर select2 को कॉल कर रहे हैं , जहां से डेटा प्राप्त करना चाहिए। आमतौर पर, एक कॉल .select2({data: [{id:"firstid", text:"firsttext"}])


2

Ajax का उपयोग करते समय भी वही त्रुटि मिली।

यदि आप ajax को select2 के साथ फ़ॉर्म रेंडर करने के लिए उपयोग कर रहे हैं, तो input_html वर्ग उन लोगों से अलग होना चाहिए जो ajax का उपयोग करके प्रदान नहीं किए गए हैं। हालांकि यह इस तरह से काम करता है क्यों नहीं काफी यकीन है।


आपका मतलब है, "<इनपुट प्रकार = 'छिपा हुआ' वर्ग = 'फू' ...." यदि आपके पास कई चयन 2 हैं, तो वे सभी 'फू' नहीं हो सकते हैं? यह मेरे लिए काम नहीं किया।
डेटशीट

1
if (typeof(opts.query) !== "function") {
    throw "query function not defined for Select2 " + opts.element.attr("id");
}

यह फेंक दिया जाता है becase क्वेरी विकल्पों में मौजूद नहीं है। आंतरिक रूप से एक चेक बनाए रखा जाता है, जिसमें पैरामीटर के लिए निम्नलिखित में से किसी एक की आवश्यकता होती है

  • ajax
  • टैग
  • डेटा
  • सवाल

इसलिए आपको बस इन 4 विकल्पों में से एक को select2 में उपलब्ध कराने की आवश्यकता है और यह अपेक्षित रूप से काम करना चाहिए।


0

मुझे भी यही त्रुटि मिली। मैं select2-3.5.2 का उपयोग कर रहा हूं

यह मेरा कोड था जिसमें त्रुटि थी

    $('#carstatus-select').select2().val([1,2])

नीचे दिए गए कोड ने मुद्दा तय किया।

    $('#carstatus-select').val([1,2]);

मैं $ ('# carstatus-select') का उपयोग करूँगा। select2 ("val", [1,2]); डॉक्स में उल्लेख के रूप में
hakuna1811

0

मेरे पास एक जटिल वेब ऐप है और मैं यह पता नहीं लगा सका कि यह त्रुटि क्यों डाली जा रही है। यह जावास्क्रिप्ट को फेंकने पर गर्भपात का कारण बन रहा था।

Select2.js में मैं बदल गया:

        if (typeof(opts.query) !== "function") {
            throw "query function not defined for Select2 " + opts.element.attr("id");
        }

सेवा:

        if (typeof(opts.query) !== "function") {
            console.error("query function not defined for Select2 " + opts.element.attr("id"));
        }

अब सब कुछ ठीक से काम करने लगता है, लेकिन मैं अभी भी त्रुटि के मामले में लॉग इन कर रहा हूं और मैं यह जानना चाहता हूं कि मेरे कोड में वास्तव में क्या त्रुटि है। लेकिन अभी के लिए यह मेरे लिए काफी अच्छा फिक्स है।


-2

उपयोग :

try {
    $("#input-select2").select2();
}
catch(err) {

}

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