Select2'yi kullanmaya ve bu hatayı birden çok öğe giriş / metin alanında almaya çalışarak:
"query function not defined for Select2 undefined error"
Select2'yi kullanmaya ve bu hatayı birden çok öğe giriş / metin alanında almaya çalışarak:
"query function not defined for Select2 undefined error"
Yanıtlar:
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();
$(document).ready(function() { $('select.form-select').select2()})
.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({});
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.
select2()
sadece boş parametreleri kabul etmeyeceğinden emin değilim
Ayrıca bu sorunu yaşadım, select2'yi iki kez başlatmadığınızdan emin olun.
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 data
mülkiyet üzerinde $scope.projectManagers
bu hatayı alıyorum.
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
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();
});
Görünüşe göre seçiciniz tanımsız bir öğe döndürüyor (Bu nedenle undefined error
dö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"}])
.
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.
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.
Bu nedenle, seçmek için bu 4 seçenekten birini sağlamanız yeterlidir ve beklendiği gibi çalışmalıdır.
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]);
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.
kullanım:
try {
$("#input-select2").select2();
}
catch(err) {
}