Cara terbaik untuk membatalkan pilihan <select> di jQuery?

219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

Apa cara terbaik, menggunakan jQuery, untuk secara elegan membatalkan pilihan?

pengguna198729
sumber

Jawaban:

347

Gunakan removeAttr ...

$("option:selected").removeAttr("selected");

Atau Prop

$("option:selected").prop("selected", false)
Ei Maung
sumber
3
Tidak berfungsi di bawah IE 8. Lihat stackoverflow.com/questions/7960773/…
Clinton Pierce
60
Jawaban ini bukan cara untuk melakukan sesuatu (dan tidak bekerja secara universal untuk boot). Pendekatan yang benar adalah .val([])atau .prop("selected", false)- gulir ke bawah.
Jon
1
JQuery pasti sudah memperbaiki ini, Ini berfungsi sempurna untuk saya di IE8 menggunakan JQuery 1.7.2.
Mikey G
2
ATAU .val (['']) untuk memilih nilai kosong jika ada.
Mark
2
$("option:selected").prop("selected", false)terkadang tidak bekerja. (tidak bekerja di browser chrome dengan jquery v1.4.2)
Rohit Goyani
163

Ada banyak jawaban di sini, tetapi sayangnya semuanya sudah cukup tua dan oleh karena itu bergantung pada attr/ removeAttryang sebenarnya bukan cara untuk pergi.

@coffeeyesplease dengan benar menyebutkan bahwa solusi lintas-browser yang baik harus digunakan

$("select").val([]);

Solusi lintas-browser yang bagus adalah

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

Anda dapat melihatnya menjalankan swa-uji di sini . Diuji pada IE 7/8/9, FF 11, Chrome 19.

Jon
sumber
1
Jauh lebih baik daripada jawaban pilihan, (berfungsi lintas peramban dan tidak melibatkan mengacaukan set atribut)
Timothy Groote
1
Jawaban sempurna untuk membatalkan pilihan semua opsi. Tapi itu tidak bisa digunakan untuk membatalkan pilihan tertentu, sedangkan removeAttr bisa.
Mikey G
2
@ MikeGG: Ini , mencatat bahwa Array.indexOfperlu polyfill untuk IE <9 (atau Anda dapat menggunakan metode setara yang disediakan banyak perpustakaan JS).
Jon
1
Apakah Anda memeriksa HTML setelahnya $('#select').val([]);? Sayangnya, ini tidak menghapus selected="selected"atribut. Itu mungkin akhirnya memposting data yang salah. Saya tidak merekomendasikan pendekatan ini!
Fr0zenFyr
1
@ Fr0zenFyr: Jika Anda mulai dengan opsi yang dipilih sebelumnya dan Anda membatalkan pilihan secara manual dengan klik mouse, itu tidak menghapus atribut juga - dan tentu saja mengirimkan formulir dijamin untuk memposting data yang benar. Ada dunia perbedaan antara atribut HTML (yang menentukan keadaan awal) dan properti DOM (yang menentukan tampilan apa dan apa yang dikirimkan). Ini sebenarnya alasan mengapa solusi yang berfokus pada atribut tidak benar. Atribut menentukan nilai awal dari properti, tetapi sejauh itulah yang terjadi.
Jon
24

Sudah lama sejak ditanya, dan saya belum menguji ini di browser yang lebih tua tetapi menurut saya jawaban yang jauh lebih sederhana adalah

$("#selectID").val([]);

.val () berfungsi untuk pilih juga http://api.jquery.com/val/

tolong kopi
sumber
Ini adalah cara terbaik dan benar-benar membersihkan nilai di sebagian besar browser - terima kasih.
Sagive SEO
Ini hanya berfungsi untuk multi-seleksi. $("select option").prop("selected", false);bekerja secara universal (pada pilihan multi dan tunggal).
splashout
23

Metode paling sederhana

$('select').val('')

Saya hanya menggunakan ini pada pilih sendiri dan itu berhasil.

Saya ada di jQuery 1.7.1 .

Joshua Pinter
sumber
1
Saya hanya menghadapi satu masalah tentang solusi ini. Tag opsi masih akan memiliki atribut "terpilih"
Tamara
@Tamara Benarkah? Saya tidak memeriksa. Apakah Anda menggunakan "terpilih" untuk sesuatu dan ini mengacaukan segalanya untuk Anda?
Joshua Pinter
19

Jawaban sejauh ini hanya berfungsi untuk beberapa pilihan di IE6 / 7; untuk non-multi pilih yang lebih umum, Anda perlu menggunakan:

$("#selectID").attr('selectedIndex', '-1');

Ini dijelaskan dalam pos yang ditautkan oleh flyfishr64. Jika Anda melihatnya, Anda akan melihat bagaimana ada 2 kasus - multi / non-multi. Tidak ada yang menghentikan Anda untuk mendapatkan solusi lengkap:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");
tukang itu
sumber
7

Oh jquery.

Karena belum ada pendekatan javascript asli, saya merasa perlu menyediakannya.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

Dan hanya untuk menunjukkan seberapa cepat ini: benchmark

Blaine Kasten
sumber
Terima kasih atas jawaban ini tanpa jQuery! :)
Saromase
6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

Ini akan beralih melalui setiap item dan batalkan pilihan hanya yang diperiksa

DinoMyte
sumber
5

Google cepat menemukan posting ini yang menjelaskan cara melakukan apa yang Anda inginkan untuk daftar pilih tunggal dan banyak di IE. Solusinya juga tampak cukup elegan:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 
Jeff Paquette
sumber
4
$("#select_id option:selected").prop("selected", false);
premkumar
sumber
3
$(option).removeAttr('selected') //replace 'option' with selected option's selector
Brandon Henry
sumber
3

Terima kasih banyak atas solusinya.

Solusi untuk daftar kombo pilihan tunggal bekerja dengan sempurna. Saya menemukan ini setelah mencari di banyak situs.

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");
Madeswaran Govindan
sumber
2
$("option:selected").attr("selected", false);
Charlie Brown
sumber
2

Cara sederhana lain:

$("#selectedID")[0].selectedIndex = -1

Rafael
sumber
1

Biasanya ketika saya menggunakan menu pilih, setiap opsi memiliki nilai yang terkait dengannya. Sebagai contoh

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

Sekarang ini tidak menghapus atribut yang dipilih dari opsi tetapi yang saya inginkan hanyalah nilainya.

jtaz
sumber
0

Tetapkan id di pilih Anda, seperti:
<select id="foo" size="2">

Maka Anda dapat menggunakan:
$("#foo").prop("selectedIndex", 0).change();

TheAlphaGhost
sumber