Làm cách nào tôi có thể kiểm tra xem một tùy chọn đã tồn tại trong lựa chọn của JQuery chưa


169

Làm cách nào tôi có thể kiểm tra xem một tùy chọn đã tồn tại trong lựa chọn của JQuery chưa?

Tôi muốn tự động thêm các tùy chọn vào select và vì vậy tôi cần kiểm tra xem tùy chọn đó đã tồn tại chưa để tránh trùng lặp.

Câu trả lời:


333

Điều này đánh giá là đúng nếu nó đã tồn tại:

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

5
Nâng cấp lên Jquery 1.6 +, kèm theo Báo giá của bạn trong ngoặc kép
Bob

1
Vâng. Trích dẫn rất quan trọng.
bobetko

2
Làm việc cho tôi trong jquery 1.7.1 mà không kèm theo giá trị của bạn trong ngoặc kép
Mathias F

Làm thế nào có thể bỏ qua trường hợp hoặc toLowerCase được thực hiện trong giải pháp trên? Điều này có cần $ .each cho danh sách thả xuống không?
Bến cống

1
Nếu chúng ta muốn thực hiện khớp trường hợp nhạy cảm thì chúng ta phải làm gì? sử dụng hàm $ .each đơn giản?
Chaudhry Waqas

21

Một cách khác sử dụng jQuery:

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

6
-1 Về cơ bản, bạn đang tự thực hiện vòng lặp thay vì để jQuery thực hiện như tất cả các câu trả lời khác. Mặc dù điều này sẽ làm việc, nó đang phát minh lại bánh xe.
Peter

14
không chắc chắn nó là -1 xứng đáng. Điều này cho thấy rõ quá trình, có thể tốt cho người mới bắt đầu. Chắc chắn không phải là câu trả lời tốt nhất, nhưng nó là một câu trả lời hợp lệ.
roberthuttinger

1
Và một số như cách tiếp cận thủ công, như tôi. Điều này cũng kết hợp bước thêm boolean trong đó, thay vì tạo 0 hoặc 1 như cách khác và phải chuyển đổi nó. Tôi nói cả hai cách tiếp cận đều tốt vì bạn phải thực hiện 2 bước. Điều này dường như rõ ràng hơn đối với quá trình, đối với tôi và ít bị lỗi hơn bằng cách không phán xét độ dài của khoảng trắng, ví dụ, như .lengthcó thể làm.
vapcguy

3
Thêm một cho những điều này, bạn cũng không cần phải lo lắng cho các nhân vật trong Giá trị của bạn
Fabio C.

1
Câu trả lời này và câu trả lời của alnort29 thực sự là cách tốt nhất để kiểm tra giá trị hiện có, nếu bạn không biết "yourValue" là gì (ví dụ: nếu đó là đầu vào của người dùng). Xây dựng một chuỗi duy nhất chỉ để "jQuery làm điều đó" sẽ yêu cầu bạn thực hiện vệ sinh đầu vào và bạn kết thúc với các thực hành mã đã ám ảnh SQL trong nhiều thập kỷ. Vì vậy, -1 là hoàn toàn không chính đáng. Câu hỏi thậm chí nói rằng họ muốn chèn giá trị "động". Đừng tự động vá chuỗi của bạn với nhau. Bạn cũng không làm 'chọn 1 từ người dùng trong đó password = "' + chuỗi + '"', phải không?
Aaa

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

2
bạn đang thiếu một khung đóng "tùy chọn [value = <enter_value_here>]"
KB.

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

Điều này có lợi thế là tự động thoát khỏi giá trị cho bạn, điều này làm cho các trích dẫn ngẫu nhiên trong văn bản dễ xử lý hơn nhiều.


2

Không hoạt động, bạn phải làm điều này:

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

1

Nó giúp tôi:

  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

Tôi đã có một vấn đề tương tự. Thay vì chạy tìm kiếm thông qua dom mỗi lần mặc dù vòng lặp cho điều khiển chọn tôi đã lưu phần tử chọn jquery trong một biến và đã làm điều này:

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

0

Mặc dù hầu hết các câu trả lời khác có hiệu quả với tôi, tôi đã sử dụng .find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
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.