ฉันจะตรวจสอบว่ามีตัวเลือกอยู่แล้วใน JQuery ที่เลือกได้


169

ฉันจะตรวจสอบได้ว่ามีตัวเลือกอยู่ใน JQuery ที่เลือกอยู่แล้วหรือไม่

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

คำตอบ:


333

สิ่งนี้จะประเมินว่าเป็นจริงหากมีอยู่แล้ว:

$("#yourSelect option[value='yourValue']").length > 0;

5
อัปเกรดเป็น Jquery 1.6 + ใส่ค่าของคุณไว้ในเครื่องหมายคำพูด
Bob

1
อ๋อ คำพูดมีความสำคัญมาก
bobetko

2
ทำงานได้ดีสำหรับฉันด้วย jquery 1.7.1 โดยไม่ต้องใส่ค่าของคุณไว้ในเครื่องหมายคำพูด
Mathias F

จะเพิกเฉย case และ toLowerCase ได้อย่างไรในการแก้ปัญหาข้างต้น สิ่งนี้จะต้องใช้ $ .each สำหรับรายการดรอปดาวน์หรือไม่
Ben Sewards

1
หากเราต้องการใช้การจับคู่แบบตรงตามตัวพิมพ์ใหญ่ - เล็กแล้วเราต้องทำอะไร? ใช้ฟังก์ชัน $ .each ง่าย ๆ หรือไม่
Chaudhry Waqas

21

อีกวิธีใช้ jQuery:

var exists = false; 
$('#yourSelect  option').each(function(){
  if (this.value == yourValue) {
    exists = true;
  }
});

6
-1 คุณกำลังทำวนซ้ำด้วยตัวเองแทนที่จะปล่อยให้ jQuery ทำเหมือนกับคำตอบอื่น ๆ ทั้งหมด แม้ว่าสิ่งนี้จะได้ผล แต่ก็เป็นการคิดค้นวงล้อใหม่
ปีเตอร์

14
ไม่แน่ใจว่ามันคุ้มค่า -1 นี่แสดงกระบวนการอย่างชัดเจนซึ่งอาจเป็นผลดีสำหรับผู้เริ่มต้น ไม่ใช่คำตอบที่ดีที่สุด แต่เป็นคำตอบที่ถูกต้อง
roberthuttinger

1
และบางคนก็ชอบแนวทางแบบแมนนวลอย่างฉัน นอกจากนี้ยังรวมขั้นตอนของการเพิ่มบูลีนในนั้นแทนการสร้าง 0 หรือ 1 เหมือนที่คนอื่นทำและต้องแปลงมัน ฉันว่าทั้งสองวิธีนั้นดีเพราะคุณต้องทำ 2 ขั้นตอนทั้งสองวิธี ดูเหมือนว่ากระบวนการนี้จะปรากฏแก่ฉันและมีแนวโน้มที่จะเกิดข้อผิดพลาดได้น้อยลงโดยไม่ตัดสินความยาวของพื้นที่ว่างตัวอย่างเช่น.lengthอาจทำ
vapcguy

3
บวกหนึ่งสำหรับสิ่งเหล่านี้คุณไม่จำเป็นต้องกังวลกับตัวละครใน yourValue
Fabio C.

1
คำตอบนี้และคำตอบของ alnort29 เป็นวิธีที่ดีที่สุดในการตรวจสอบค่าที่มีอยู่หากคุณไม่ทราบว่า "yourValue" คืออะไร (ตัวอย่างเช่นหากเป็นอินพุตของผู้ใช้) การสร้างสตริงเดี่ยวเพื่อให้ "jQuery ทำได้" จะทำให้คุณต้องทำการฆ่าเชื้ออินพุตและคุณจะต้องจบลงด้วยการใช้โค้ดที่หลอกหลอน SQL มานานหลายทศวรรษ -1 ไม่ได้รับการรับรองอย่างสมบูรณ์ คำถามยังระบุว่าพวกเขาต้องการแทรกค่า "แบบไดนามิก" อย่าปะสตริงของคุณเข้าด้วยกันแบบไดนามิก คุณยังไม่ได้ 'เลือก 1 จากผู้ใช้ที่รหัสผ่าน = "' + สตริง + '"' ใช่ไหม?
Aaa

20
if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){
  alert("option doesn't exist!");
}

2
คุณไม่มีวงเล็บปิด "ตัวเลือก [value = <enter_value_here>]"
KB

17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

นี่เป็นข้อได้เปรียบของการหลบหลีกมูลค่าโดยอัตโนมัติซึ่งจะทำให้การเสนอราคาแบบสุ่มในข้อความง่ายต่อการจัดการ


2

ไม่ทำงานคุณต้องทำสิ่งนี้:

if ( $("#your_select_id option[value='enter_value_here']").length == 0 ){
  alert("option doesn't exist!");
}

1

มันช่วยฉัน:

  var key = 'Hallo';

   if ( $("#chosen_b option[value='"+key+"']").length == 0 ){
   alert("option not exist!");

    $('#chosen_b').append("<option value='"+key+"'>"+key+"</option>");
    $('#chosen_b').val(key);
   $('#chosen_b').trigger("chosen:updated");
                         }
  });

0

ฉันมีปัญหาที่คล้ายกัน แทนที่จะทำการค้นหาผ่าน dom ทุกครั้งแม้ว่าการวนรอบสำหรับตัวควบคุมการเลือกฉันบันทึกองค์ประกอบการเลือก jquery ในตัวแปรและทำสิ่งนี้:

function isValueInSelect($select, data_value){
    return $($select).children('option').map(function(index, opt){
        return opt.value;
    }).get().includes(data_value);
}

0

แม้ว่าคำตอบอื่น ๆ ส่วนใหญ่ใช้ได้สำหรับฉันฉันใช้. find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.