Kiểm tra xem giá trị có trong danh sách được chọn hay không với JQuery


Câu trả lời:


180

Sử dụng Bộ chọn các dấu bằng thuộc tính

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

Nếu giá trị của tùy chọn được đặt qua Javascript, điều đó sẽ không hoạt động. Trong trường hợp này, chúng ta có thể làm như sau:

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

8
Cách tiếp cận thứ hai rõ ràng cũng an toàn hơn vì nó cho phép các giá trị tùy chọn chứa bất kỳ ký tự nào, bao gồm ]và `\ '. Tránh tạo chuỗi bộ chọn từ văn bản thô mà không thực hiện thoát CSS thích hợp.
bobince

8
Tại sao return false?
Grant Birchmeier

14
Trả về false được sử dụng để ngắt / kết thúc vòng lặp .each.
Thiên thần

Nếu bạn tạo các tùy chọn mới bằng JavaScript sử dụng logic này: $ ('# select-box'). Append ($ ('<option value = "' + value + '">' + text + '</option>')) ; (hoặc tất nhiên trong phong cách nói nhiều hơn), ví dụ đầu tiên sẽ hoạt động (bạn không cần lặp lại).
Lukas Jelinek

1
Tôi dường như không thể tìm thấy trường hợp đoạn mã đầu tiên không hoạt động. Tôi đã thử cả việc thêm một tùy chọn mới và đặt giá trị của một tùy chọn hiện có bằng hàm val () của jQuery. Trong cả hai trường hợp, đoạn mã đầu tiên vẫn hoạt động. Nó sẽ thất bại trong trường hợp nào?
dallin

17

Chỉ trong trường hợp bạn (hoặc ai đó) có thể muốn làm điều đó mà không có 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;
   }

Tại sao không chỉ i ++?
csr-nontol

1
++ i prefix luôn nhanh hơn postfix @ csr-nontol
Alok

11

Đây là một tùy chọn tương tự khác. Trong trường hợp của tôi, tôi đang kiểm tra các giá trị trong một hộp khác khi tạo danh sách được chọn. Tôi tiếp tục chạy vào các giá trị không xác định khi tôi sẽ so sánh, vì vậy tôi đặt kiểm tra của mình theo cách này:

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

Tôi không biết liệu phương pháp này có đắt hơn không.


8

Tại sao không sử dụng một bộ lọc?

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

So sánh lỏng lẻo hoạt động bởi vì tồn tại> 0 là đúng, tồn tại == 0 là sai, vì vậy bạn chỉ có thể sử dụng

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

Hoặc kết hợp nó:

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

Hoặc nơi mỗi menu thả xuống chọn có lớp hộp chọn, điều này sẽ cung cấp cho bạn một đối tượng jquery của (các) lựa chọn chứa giá trị:

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

Đây là cách trực quan nhất.
Simon

4

if(!$('#select-box').find("option:contains('" + thevalue  + "')").length){
//do stuff
}


Trong giải pháp của bạn, Nó không phải là theValuenhưng option_numbertrong menu thả xuống. Giải pháp của bạn là sai.
Arsman Ahmad

1

Tôi biết đây là một loại câu hỏi cũ bởi câu hỏi này hoạt động tốt hơn.

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);
}

Như bạn có thể thấy trong ví dụ này, tôi đang tìm kiếm theo tên thả xuống dữ liệu thẻ duy nhất và giá trị của tùy chọn đã chọn. Tất nhiên bạn không cần những thứ này để những thứ này hoạt động nhưng tôi đã bao gồm chúng để người khác có thể thấy bạn có thể tìm kiếm nhiều giá trị, v.v.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.