Bagaimana saya bisa memeriksa apakah opsi sudah ada di pilih oleh JQuery

169

Bagaimana saya bisa memeriksa apakah opsi sudah ada di pilih oleh JQuery?

Saya ingin menambahkan opsi secara dinamis ke dalam pilih dan jadi saya perlu memeriksa apakah opsi sudah ada untuk mencegah duplikasi.

Billy
sumber

Jawaban:

333

Ini bernilai true jika sudah ada:

$("#yourSelect option[value='yourValue']").length > 0;
Tamas Czinege
sumber
5
Meng-upgrade ke Jquery 1.6 +, sertakan YourValue dalam tanda kutip
Bob
1
Ya. Kutipan sangat penting.
bobetko
2
Bekerja untuk saya di jquery 1.7.1 tanpa menyertakan Nilai Anda dalam tanda kutip
Mathias F
Bagaimana mengabaikan case atau toLowerCase diimplementasikan dalam solusi di atas? Apakah ini membutuhkan $. Setiap untuk daftar drop down?
Ben Sewards
1
jika kita ingin menerapkan pencocokan sensitif huruf maka apa yang harus kita lakukan? gunakan fungsi $ .each yang sederhana?
Chaudhry Waqas
21

Cara lain menggunakan jQuery:

var exists = false; 
$('#yourSelect  option').each(function(){
  if (this.value == yourValue) {
    exists = true;
  }
});
HaMinh Nguyen
sumber
6
-1 Anda pada dasarnya melakukan pengulangan sendiri daripada membiarkan jQuery melakukannya seperti semua jawaban lainnya. Meskipun ini akan berhasil, itu menciptakan kembali roda.
Peter
14
tidak yakin itu -1 layak. ini secara eksplisit menunjukkan prosesnya, yang bisa baik untuk pemula. Tentu bukan jawaban terbaik, tetapi itu adalah jawaban yang valid.
roberthuttinger
1
Dan beberapa menyukai pendekatan manual, seperti saya. Ini juga menggabungkan langkah menambahkan boolean di sana, alih-alih menghasilkan 0 atau 1 seperti yang lainnya dan harus mengubahnya. Saya katakan kedua pendekatan itu baik-baik saja karena Anda harus melakukan 2 langkah. Ini tampaknya lebih terlihat oleh proses, bagi saya, dan kurang rentan terhadap kesalahan dengan tidak menilai panjang spasi, misalnya, seperti yang .lengthmungkin dilakukan.
vapcguy
3
Ditambah satu untuk ini, Anda juga tidak perlu khawatir untuk karakter dalam Nilai Anda
Fabio C.
1
Jawaban ini dan alnort29 sebenarnya adalah cara terbaik untuk memeriksa nilai yang ada, jika Anda tidak tahu apa "nilai Anda" itu (misalnya, jika itu input pengguna). Membangun string tunggal hanya untuk membiarkan "jQuery melakukannya" akan mengharuskan Anda untuk melakukan sanitasi input, dan Anda berakhir dengan praktik kode yang telah menghantui SQL selama beberapa dekade. Jadi -1 benar-benar tidak beralasan. Pertanyaannya bahkan menyatakan bahwa mereka ingin memasukkan nilai "secara dinamis". Jangan tempelkan string Anda secara dinamis. Anda juga tidak melakukan 'pilih 1 dari pengguna di mana kata sandi = "' + string + '"', bukan?
Aaa
20
if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){
  alert("option doesn't exist!");
}
Seb
sumber
2
Anda kehilangan braket penutup "option [value = <enter_value_here>]"
KB.
17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

Ini memiliki keuntungan untuk secara otomatis keluar dari nilai untuk Anda, yang membuat kutipan acak dalam teks lebih mudah untuk ditangani.

alnorth29
sumber
2

Tidak berfungsi, Anda harus melakukan ini:

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

Ini membantu saya:

  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");
                         }
  });
Sulung Nugroho
sumber
0

Saya punya masalah serupa. Daripada menjalankan pencarian melalui dom setiap kali melalui loop untuk kontrol pilih, saya menyimpan elemen pilih jquery dalam variabel dan melakukan ini:

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

Meskipun sebagian besar jawaban lain berfungsi untuk saya, saya menggunakan .find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
Strabek
sumber