“ ฟังก์ชันการสืบค้นไม่ได้กำหนดไว้สำหรับข้อผิดพลาดที่ไม่ได้กำหนด Select2”


คำตอบ:


241

อยู่ในชุดข้อความของกลุ่ม Google นี้

ปัญหาเกิดจาก div พิเศษที่ถูกเพิ่มโดย select2 Select2 ได้เพิ่ม div ใหม่ด้วยคลาส "select2-container form-select" เพื่อตัดการเลือกที่สร้างขึ้น ดังนั้นในครั้งต่อไปที่ฉันโหลดฟังก์ชันข้อผิดพลาดจึงเกิดขึ้นเนื่องจาก select2 ถูกแนบกับองค์ประกอบ div ฉันเปลี่ยนตัวเลือกของฉัน ...

คำนำหน้า select2 ตัวระบุ css ที่มีชื่อแท็กเฉพาะ "select":

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

แก้ไขให้ฉันในกรณีของฉันฉันกำลังโคลนแถวของอินพุตฟอร์มซึ่งรวมถึงเมนู select2-ified select และสิ่งแปลก ๆ ทุกประเภทเกิดขึ้นหลังจากการโคลนครั้งแรก
martincarlin87

ต้องอยู่ข้างในด้วย$(document).ready(function() { $('select.form-select').select2()})
TED

1
ปัญหาเดียวกันนี้จะแก้ไขได้อย่างไรในคำสั่ง Angular UI Select2
zavidovych

เพิ่งเจอปัญหาเดียวกันนี้ในวันนี้ - แม้ว่าก่อนหน้านี้รหัสเดิมจะไม่มีปัญหา (อาจเป็นการอัปเดต select2?) อย่างไรก็ตามสิ่งนี้แก้ไขให้ฉันได้เช่นกันและทำงานได้ดีอีกครั้ง ตอบโจทย์มาก!
user756659

10
ปัญหานี้มักเกิดขึ้นหากตัวควบคุมการเลือกถูกเตรียมใช้งานโดย.select2({})วิธีการแล้ว ทางออกที่ดีกว่าคือการเรียกใช้เมธอดทำลายก่อน เช่น$("#mySelectControl").select2("destroy").select2({});
Dmitry S.

18

ข้อความแสดงข้อผิดพลาดนี้กว้างเกินไป หนึ่งในแหล่งที่มาที่เป็นไปได้อื่น ๆ คือคุณกำลังพยายามเรียกselect2()method ในอินพุต "select2ed" อยู่แล้ว


13

ในกรณีที่คุณเริ่มต้นอินพุตว่างให้ทำสิ่งนี้:

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

อ่านความคิดเห็นแรกด้านล่างอธิบายว่าเหตุใดคุณจึงควรใช้รหัสในคำตอบของฉัน


2
ฉันมีปัญหานี้เมื่อฉันย้ายกล่อง select2 จากองค์ประกอบการเลือกจริงไปยังประเภทอินพุต = องค์ประกอบที่ซ่อนอยู่ซึ่งฉันกำลังเติมข้อมูลในภายหลัง ในการดำเนินการผ่านโค้ด select2 ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไม่มีการส่งผ่านค่าแบบสอบถาม ajax ข้อมูลหรือแท็ก
Daniel

1
นี่ควรเป็นคำตอบที่ได้รับการยอมรับสำหรับคำถามนี้ ไม่แน่ใจว่าทำไมselect2()ไม่เพียงแค่ยอมรับพารามิเตอร์ว่างเปล่า
swdev

11

ฉันมีปัญหานี้เช่นกันตรวจสอบให้แน่ใจว่าคุณไม่ได้เริ่มต้น select2 สองครั้ง


เหมือนกันสำหรับฉัน แต่ข้อผิดพลาดไม่ใช่ปัญหาสำหรับฉัน s2 ทำงานอยู่แล้ว
รัชกาลที่ 85

ทำอย่างไร?
khaled saleh

7

สำหรับฉันปัญหานี้เกิดขึ้นเพื่อตั้งค่าแอตทริบิวต์ data-ui-select2 ที่ถูกต้อง:

<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

ปัญหานี้เกิดขึ้นกับวิธีที่ฉันสร้างกล่องเลือก select2 ของฉัน ในไฟล์จาวาสคริปต์หนึ่งไฟล์ที่ฉันมี ...

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

และในไฟล์ js อื่นแทนที่ ...

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

ปัญหานี้เกิดขึ้นในแอปพลิเคชัน Rails


4

ฉันยังได้รับข้อผิดพลาดเดียวกันเมื่อใช้ ajax กับ textbox จากนั้นฉันแก้ปัญหาโดยลบ class select2ของ textbox และตั้งค่า select2 โดย id เช่น:

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

3

ดูเหมือนว่าตัวเลือกของคุณจะส่งคืนองค์ประกอบที่ไม่ได้กำหนดไว้ (ดังนั้นจึงundefined errorถูกส่งกลับ)

ในกรณีที่องค์ประกอบนั้นมีอยู่จริงคุณกำลังเรียกใช้ select2 บนinputองค์ประกอบโดยไม่ต้องจัดหาสิ่งใดให้กับ select2 ซึ่งควรดึงข้อมูลมาจากที่ใด .select2({data: [{id:"firstid", text:"firsttext"}])โดยปกติแล้วสายหนึ่ง


2

ยังได้รับข้อผิดพลาดเดียวกันเมื่อใช้ ajax

หากคุณใช้ ajax เพื่อสร้างฟอร์มด้วย select2 คลาส input_html จะต้องแตกต่างจากที่ไม่ได้แสดงโดยใช้ ajax ไม่ค่อยแน่ใจว่าทำไมมันถึงได้ผลเช่นนี้


คุณหมายถึงว่า "<input type = 'hidden' class = 'foo' .... " โดยที่ถ้าคุณมี select2 หลายตัวจะไม่สามารถเป็น 'foo' ได้ทั้งหมด? สิ่งนี้ไม่ได้ผลสำหรับฉัน
dethSwatch

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

สิ่งนี้ถูกส่งเนื่องจากไม่มีแบบสอบถามในตัวเลือก ภายในมีการตรวจสอบซึ่งต้องใช้อย่างใดอย่างหนึ่งต่อไปนี้สำหรับพารามิเตอร์

  • อาแจ็กซ์
  • แท็ก
  • ข้อมูล
  • สอบถาม

ดังนั้นคุณต้องระบุหนึ่งใน 4 ตัวเลือกต่อไปนี้เพื่อเลือก 2 และควรใช้งานได้ตามที่คาดไว้


0

ฉันได้รับข้อผิดพลาดเดียวกัน ฉันใช้ select2-3.5.2

นี่คือรหัสของฉันซึ่งมีข้อผิดพลาด

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

ด้านล่างรหัสแก้ไขปัญหา

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

ฉันจะใช้ $ ('# carstatus-select'). select2 ("val", [1,2]); ตามที่กล่าวไว้ในเอกสาร
hakuna1811

0

ฉันมี Web App ที่ซับซ้อนและไม่สามารถเข้าใจได้ว่าทำไมจึงเกิดข้อผิดพลาดนี้ มันทำให้ JavaScript ยกเลิกเมื่อถูกโยนทิ้ง

ใน 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) {

}

สิ่งนี้จะซ่อนเฉพาะข้อผิดพลาดเท่านั้นไม่สามารถแก้ไขได้ นี่ไม่ใช่วิธีแก้ปัญหาในกรณีส่วนใหญ่
Ramses
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.