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


คำตอบ:


180

ใช้ตัวเลือกแอตทริบิวต์เท่ากับ

var thevalue = 'foo';
var exists = 0 != $('#select-box option[value='+thevalue+']').length;

หากค่าของตัวเลือกถูกตั้งค่าผ่าน Javascript จะไม่ทำงาน ในกรณีนี้เราสามารถดำเนินการดังต่อไปนี้:

var exists = false;
$('#select-box option').each(function(){
    if (this.value == 'bar') {
        exists = true;
        return false;
    }
});

8
แนวทางที่สองอย่างชัดเจนยังปลอดภัยกว่าเนื่องจากอนุญาตให้ใช้ค่าตัวเลือกที่มีอักขระใด ๆ รวมถึง]และ "\" หลีกเลี่ยงการสร้างสตริงตัวเลือกจากข้อความดิบโดยไม่ใช้ CSS-Escape ที่เหมาะสม
bobince

8
ทำไมreturn false?
Grant Birchmeier

14
Return false ใช้เพื่อทำลาย / สิ้นสุดแต่ละลูป
Angel

หากคุณสร้างตัวเลือกใหม่ด้วย JavaScript โดยใช้ตรรกะนี้: $ ('# select-box'). append ($ ('<option value = "' + value + '">' + text + '</option>')) ; (หรือแน่นอนในรูปแบบการพูดมากขึ้น) ตัวอย่างแรกจะได้ผล (คุณไม่จำเป็นต้องทำซ้ำ)
Lukas Jelinek

1
ดูเหมือนว่าฉันไม่พบกรณีที่ข้อมูลโค้ดแรกใช้ไม่ได้ ฉันได้ลองทั้งการต่อท้ายตัวเลือกใหม่และการตั้งค่าของตัวเลือกที่มีอยู่ด้วยฟังก์ชัน val () ของ jQuery ในทั้งสองกรณีข้อมูลโค้ดแรกยังคงใช้งานได้ จะล้มเหลวในกรณีใด
dallin

17

ในกรณีที่คุณ (หรือคนอื่น) สนใจที่จะทำโดยไม่ใช้ jQuery:

var exists = false;
for(var i = 0, opts = document.getElementById('select-box').options; i < opts.length; ++i)
   if( opts[i].value === 'bar' )
   {
      exists = true; 
      break;
   }

ทำไมไม่เพียงแค่ฉัน ++?
csr-nontol

1
++ คำนำหน้าฉันเร็วกว่าเสมอแล้ว postfix @ csr-nontol
Alok

11

นี่เป็นอีกทางเลือกหนึ่งที่คล้ายกัน ในกรณีของฉันฉันกำลังตรวจสอบค่าในกล่องอื่นขณะที่ฉันสร้างรายการที่เลือก ฉันยังคงพบกับค่าที่ไม่ได้กำหนดเมื่อฉันจะเปรียบเทียบดังนั้นฉันจึงตั้งค่าการตรวจสอบด้วยวิธีนี้:

if ( $("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff }

ฉันไม่รู้ว่าวิธีนี้แพงกว่าหรือไม่


8

ทำไมไม่ใช้ตัวกรอง?

var thevalue = 'foo';    
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length;

การเปรียบเทียบแบบหลวมทำงานได้เนื่องจากมีอยู่> 0 เป็นจริงมีอยู่ == 0 เป็นเท็จดังนั้นคุณสามารถใช้ได้

if(exists){
    // it is in the dropdown
}

หรือรวมเข้าด้วยกัน:

if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){
    // found
}

หรือตำแหน่งที่เลือกแบบเลื่อนลงแต่ละรายการมีคลาสกล่องเลือกสิ่งนี้จะทำให้คุณได้วัตถุ jquery ของสิ่งที่เลือกซึ่งมีค่า:

var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();

นี่เป็นวิธีที่ง่ายที่สุด
Simon


1

ฉันรู้ว่านี่เป็นคำถามเก่าเพราะคำถามนี้ใช้ได้ดีกว่า

if(!$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"] option[value="'+data['item'][i]['id']+'"]')[0]){
  //Doesn't exist, so it isn't a repeat value being added. Go ahead and append.
  $('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"]').append(option);
}

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

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