"Select2 tanımsız hatası için sorgu işlevi tanımlanmadı"


Yanıtlar:


241

Bu google grubu başlığında anlatılanlar

Sorun, select2 tarafından eklenen fazladan div'den kaynaklanıyordu. Select2, oluşturulan seçimi kaydırmak için "select2-container form-select" sınıfına sahip yeni div ekledi. Bu nedenle, işlevi bir sonraki sefer yüklediğimde, select2 div öğesine eklenirken hata atılıyordu. Seçicimi değiştirdim ...

Belirli etiket adı "select" olan önek select2 css tanımlayıcısı:

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

benim için bir şekilde düzeltti, benim durumumda, select2 ile seçilmiş menüleri içeren bir dizi form girdisini klonluyordum ve ilk klondan sonra her türlü tuhaf şeyler oluyordu.
martincarlin87

Ayrıca içeride olmalı$(document).ready(function() { $('select.form-select').select2()})
TED

1
Angular UI Select2 yönergesinde aynı problem nasıl çözülebilir?
zavidovych

Bugün aynı problemle karşılaştım - aynı kodda daha önce herhangi bir sorun olmamasına rağmen (belki bir select2 güncellemesi?). Her neyse, bu benim için de çözdü ve yine iyi çalışıyor. Mükemmel cevap!
user756659

10
Bu sorun genellikle, seçme denetimi .select2({})yöntem tarafından zaten başlatılmışsa ortaya çıkar . Önce yok etme yöntemini çağırmak daha iyi bir çözüm olabilir. Ör:$("#mySelectControl").select2("destroy").select2({});
Dmitry S.

18

Bu hata mesajı çok geneldir. Diğer olası kaynaklarından biri, select2()yöntemi zaten "seçilmiş2" girişte çağırmaya çalışmanızdır.


13

Boş bir girişi başlatmanız durumunda şunu yapın:

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

Aşağıdaki ilk yorumu okuyun, cevabımdaki kodu neden ve ne zaman kullanmanız gerektiğini açıklıyor.


2
Bir select2 kutusunu gerçek bir seçim öğesinden daha sonra doldurduğum bir girdi türü = gizli öğeye taşıdığımda bu sorunu yaşadım. Select2 kodunda adım adım ilerlerken, bu hata atılır, çünkü hiçbir sorgu, ajax, veri veya etiket değeri geçirilmez.
Daniel

1
Bu soru için kabul edilen cevap bu olmalıdır. Neden select2()sadece boş parametreleri kabul etmeyeceğinden emin değilim
swdev

11

Ayrıca bu sorunu yaşadım, select2'yi iki kez başlatmadığınızdan emin olun.


benim için aynı, ancak hata benim için sorun değildi. s2 yine de çalışıyor
Reign. 85

bu nasıl yapılır?
khaled saleh

7

Benim için bu sorun, doğru data-ui-select2 özniteliğini ayarlamak için kaynatıldı:

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


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

$scope.selectedProjectManager = {};

Ben kapalı alırsak datamülkiyet üzerinde $scope.projectManagersbu hatayı alıyorum.


5

Bu sorun, seçme2 seçme kutumu nasıl oluşturduğuma bağlıydı. Bir javascript dosyasında ...

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

Ve başka bir js dosyasında bir geçersiz kılma ...

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

İkinci geçersiz kılmanın bir pencere yükleme olayına taşınması sorunu çözdü.

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

Bu sorun bir Rails uygulamasında gelişti


4

Ajax'ı bir metin kutusuyla kullanırken de aynı hatayı aldım, sonra onu metin kutusunun select2 sınıfını kaldırarak ve id ile select2'yi kurarak çözüyorum:

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

3

Görünüşe göre seçiciniz tanımsız bir öğe döndürüyor (Bu nedenle undefined errordöndürülür)

Elemanın gerçekten var olması durumunda, select2'ye herhangi bir inputşey sağlamadan, veriyi nereden alması gereken bir elemanda select2'yi çağırırsınız. Genellikle biri arar .select2({data: [{id:"firstid", text:"firsttext"}]).


2

Ajax kullanırken de aynı hatayı aldım.

Select2 ile formları oluşturmak için ajax kullanıyorsanız, input_html sınıfı ajax kullanılarak OLUŞTURULMAYAN sınıflardan farklı olmalıdır. Yine de neden bu şekilde çalıştığından tam olarak emin değilim.


"<İnput type = 'hidden' class = 'foo' ...." gibi mi demek istiyorsun, burada birden fazla select2'niz varsa, hepsi 'foo' olamaz? Bu benim için işe yaramadı.
dethSwatch

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

Seçeneklerde sorgu mevcut olmadığı için bu atılır. Dahili olarak, parametreler için aşağıdakilerden birini gerektiren bir kontrol vardır.

  • ajax
  • etiketler
  • veri
  • sorgu

Bu nedenle, seçmek için bu 4 seçenekten birini sağlamanız yeterlidir ve beklendiği gibi çalışmalıdır.


0

Aynı hatayı aldım. Select2-3.5.2 kullanıyorum

Bu, hatalı olan kodumdu

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

Aşağıdaki kod sorunu çözdü.

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

$ ('# Carstatus-select') kullanırdım. Select2 ("val", [1,2]); belgelerde bahsedildiği gibi
hakuna1811

0

Karmaşık bir Web Uygulamam var ve bu hatanın neden atıldığını tam olarak anlayamadım. JavaScript'in atıldığında durmasına neden oluyordu.

Select2.js'de değiştirdim:

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

için:

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

Şimdi her şey düzgün çalışıyor gibi görünüyor, ancak kodumda tam olarak neyin hataya neden olduğunu denemek ve bulmak istemem durumunda hala hata veriyor. Ama şimdilik bu benim için yeterince iyi bir düzeltme.


-2

kullanım:

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

}

bu sadece hatayı gizler, düzeltmez. Bu, vakaların büyük çoğunluğunda bir çözüm değildir
Ramses
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.