Cara membuat opsi pertama <select> dipilih dengan jQuery

548

Bagaimana cara membuat opsi pertama yang dipilih dengan jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>
Oh Tuhan
sumber

Jawaban:

957
$("#target").val($("#target option:first").val());
David Andres
sumber
364
Harus dicatat bahwa ini lebih mudah dilakukan dengan $ ("# target") [0] .selectedIndex = 0;
David Andres
17
Ini berfungsi, tetapi didasarkan pada nilai elemen 1 , jika elemen 1 berisi nilai kosong, itu akan memilih elemen terdekat DENGAN nilai
evilReiko
2
Tampaknya bekerja dengan baik, kecuali untuk IE6. Tidak yakin 7-8, bekerja pada 9.
Nicholi
3
Saya menyangkal pernyataan saya sebelumnya, maju sendiri. $ ("# target"). val ("option: first"); bekerja paling banyak di mana-mana kecuali IE6 $ ("target"). akan bekerja di IE6, karena Anda benar-benar mencari nilai pertama, dan memasukkannya sebagai nilai target. Dua pencarian id, bukan satu.
Nicholi
2
Dan itu sebenarnya diperlukan untuk IE6, 7, dan 8. Sedangkan .val ('option: first') berfungsi di IE9 (dan Safari dan Firefox dan Chrome dan Opera).
Nicholi
178

Anda bisa mencoba ini

$("#target").prop("selectedIndex", 0);
Esben
sumber
2
Ini tidak berfungsi dengan baik dalam semua kasus. Saya memiliki drop down orangtua / anak cascading. Pilih induk # 1, tampilan anak # 1, pilih orangtua # 2 tampilan anak # 2. Setiap kali mereka memilih induk baru, itu harus mengatur anak yang sesuai kembali ke opsi pertama. Solusi ini tidak melakukan ini. Meninggalkan menu anak "lengket". Lihat opsi: terpilih.prop ('terpilih', salah) / opsi: first.prop ('terpilih', 'terpilih') solusi pada pertanyaan ini untuk jawaban yang bekerja di lebih banyak skenario.
Lance Cleveland
ini tidak memicu acara Ubah. Setidaknya dalam chrome.
Tomasz Mularczyk
Terima kasih! Ini adalah jawaban pertama dalam daftar jawaban yang cocok untuk saya.
Casey Crookston
6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan
@Romesh bagaimana saya bisa menetapkan nilai berdasarkanIndex yang dipilih?
Junior Frogie
111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');
pengguna149513
sumber
1
Pendekatan kedua yang bagus. Harap tambahkan nilai atribut yang dipilih. Misalnya, attr ("terpilih", "terpilih"). Tanpa parameter tambahan ini, pemilihan tidak dilakukan.
David Andres
@EgorPavlikhin - Saya baru saja mengedit jawaban untuk menyertakan kode JQuery untuk menghapus bendera "terpilih" dari semua opsi yang mungkin sudah dipilih. Sekarang jawabannya sudah benar :)
jmort253
20
Tidak perlu eachfungsi, harus: $('#target option[selected="selected"]').removeAttr('selected')juga sekarang harus digunakan dengan removePropdan propsebagai gantinya.
vsync
Versi yang lebih menyeluruh dari jawaban James Lee Baker di tempat lain pada pertanyaan ini, meskipun menambahkan siklus komputasi yang mungkin tidak diperlukan jika antarmuka dikelola dengan baik.
Lance Cleveland
65

Saat Anda menggunakan

$("#target").val($("#target option:first").val());

ini tidak akan berfungsi di Chrome dan Safari jika nilai opsi pertama adalah nol.

saya lebih memilih

$("#target option:first").attr('selected','selected');

karena bisa bekerja di semua browser.

Jimmy Huang
sumber
3
Anda juga perlu "batalkan pilihan" elemen yang dipilih sebelumnya agar ini berfungsi dalam lebih banyak kasus. Lihat jawaban dari James Lee Baker untuk detailnya.
Lance Cleveland
44

Mengubah nilai input yang dipilih atau menyesuaikan atribut yang dipilih dapat menimpa propertiOpsi yang dipilih secara default dari elemen DOM, menghasilkan elemen yang mungkin tidak me-reset dengan benar dalam bentuk yang memiliki event reset yang dipanggil.

Gunakan metode prop jQuery untuk menghapus dan mengatur opsi yang diperlukan:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");
James Lee Baker
sumber
3
Sempurna. Saya memiliki menu drop down cascading. Ketika seorang pengguna memilih opsi orang tua 2 maka opsi anak 3 saya tidak ingin itu "tetap". Dengan kata lain, pengguna kemudian memilih induk # 1, lalu memilih kembali induk # 2. Ketika itu terjadi, saya ingin menu anak untuk mengatur ulang ke opsi pertama (yaitu "Apa" dalam kasus saya). Semua solusi lain di sini gagal pada Firefox v19 dan Chrome di Linux.
Lance Cleveland
33
$("#target")[0].selectedIndex = 0;
danaktif
sumber
1
Ini tidak akan berfungsi dalam kasus di mana drop-down memiliki item yang dipilih sebelumnya. Lihat komentar saya pada jawaban yang dipilih untuk detailnya.
Lance Cleveland
21

Satu titik halus yang saya pikir telah saya temukan tentang jawaban pilihan teratas adalah bahwa meskipun mereka benar mengubah nilai yang dipilih, mereka tidak memperbarui elemen yang dilihat pengguna (hanya ketika mereka mengklik widget mereka akan melihat cek di sebelah elemen yang diperbarui).

Memanggil panggilan .change () hingga akhir juga akan memperbarui widget UI.

$("#target").val($("#target option:first").val()).change();

(Perhatikan bahwa saya perhatikan ini saat menggunakan jQuery Mobile dan sebuah kotak di desktop Chrome, jadi ini mungkin tidak terjadi di mana-mana).

Bradley Bossard
sumber
Memanggil panggilan .change () hingga akhir juga akan memperbarui widget UI.
codemirror
17

Jika Anda memiliki opsi yang dinonaktifkan, Anda dapat menambahkan tidak ([dinonaktifkan]) untuk mencegah memilihnya yang menghasilkan hal-hal berikut:

$("#target option:not([disabled]):first").attr('selected','selected')
Melanie
sumber
1
Poin bagus tentang opsi yang dinonaktifkan. Tambahan yang bagus untuk jawaban yang disajikan!
Lance Cleveland
16

Cara lain untuk mereset nilai (untuk beberapa elemen yang dipilih) dapat berupa ini:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});
Nick Petropoulos
sumber
4
Memberi +1 sebenarnya jawaban yang bagus, tetapi Anda bisa membuatnya lebih spesifik untuk domain pertanyaan; alih-alih $("selector")Anda bisa saja menulis$('#target')
Ja͢ck
7

Sederhana seperti itu:

$('#target option:first').prop('selected', true);
Ramon Schmidt
sumber
1
ini jauh lebih baik
Arun Prasad ES
7
$('#newType option:first').prop('selected', true);
FFFFFF
sumber
Ini hanya berfungsi jika tidak ada opsi yang dipilih. Lihat jawaban James Lee Baker.
Webar
6

Saya telah menemukan bahwa hanya pengaturan attr yang dipilih tidak berfungsi jika sudah ada atribut yang dipilih. Kode yang saya gunakan sekarang pertama-tama akan menghapus atribut yang dipilih, lalu pilih opsi pertama.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');
Francis Lewis
sumber
Ini bekerja dengan baik dan sangat mirip dengan jawaban oleh James Lee Baker yang dicatat di tempat lain pada pertanyaan ini. Saya suka jawaban lain dengan opsi: terpilih dan opsi: pertama sebagai eksekusi opsi: pertama cenderung lebih cepat (berdasarkan perhitungan) daripada find ().
Lance Cleveland
5

Meskipun masing-masing fungsi mungkin tidak diperlukan ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

bekerja untukku.

Darth Jon
sumber
5

Inilah cara saya akan melakukannya:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');
Fabrizio
sumber
1
Ini bekerja dengan baik dan sangat mirip dengan jawaban oleh James Lee Baker yang dicatat di tempat lain pada pertanyaan ini. Saya suka jawaban lain dengan opsi: terpilih dan opsi: pertama sebagai eksekusi opsi: pertama cenderung lebih cepat (berdasarkan perhitungan) daripada find ().
Lance Cleveland
2

Itu hanya berfungsi untuk saya menggunakan pemicu ('perubahan') pada akhirnya, seperti ini:

$("#target option:first").attr('selected','selected').trigger('change');
Pablo SG Pacheco
sumber
2

Jika Anda akan menggunakan opsi pertama sebagai suka standar

<select>
    <option value="">Please select an option below</option>
    ...

maka Anda bisa menggunakan:

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

Itu bagus dan sederhana.

Gary - ITB
sumber
2

Ini berhasil untuk saya!

$("#target").prop("selectedIndex", 0);
Archana Kamath
sumber
1

Di belakang balasan James Lee Baker, saya lebih suka solusi ini karena menghilangkan ketergantungan pada dukungan browser untuk: pertama: yang dipilih ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');
Matthew Scott
sumber
1

Bagi saya itu hanya berfungsi ketika saya menambahkan kode berikut:

.change();

Bagi saya itu hanya berfungsi ketika saya menambahkan kode berikut: Karena saya ingin "mengatur ulang" formulir, yaitu, pilih semua opsi pertama dari semua pilihan formulir, saya menggunakan kode berikut:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });

Jean Douglas
sumber
1

Menggunakan:

$("#selectbox option:first").val()

Silakan temukan kerja sederhana di JSFiddle ini .

Chetan
sumber
Bagaimana dengan posisi 15, 25, atau dengan teks tertentu? : D
Marcelo Agimóvel
Memanggil .val()hanya mendapatkan nilai opsi pertama dalam daftar. Sebenarnya tidak memilih (memilih) pilihan pertama, seperti yang ditanyakan dalam pertanyaan awal.
Funka
1

Bagi saya, itu hanya berfungsi ketika saya menambahkan baris kode berikut

$('#target').val($('#target').find("option:first").val());
Muhammad Qasim
sumber
0
$("#target").val(null);

bekerja dengan baik di chrome

Krishna Murthy
sumber
0

Jika Anda menyimpan objek jQuery dari elemen pilih:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());
Daniel
sumber
0

Periksa pendekatan terbaik ini menggunakan jQuery dengan ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});
jdnichollsc
sumber
0

Anda dapat memilih opsi apa saja dropdowndengan menggunakannya.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 
Arsman Ahmad
sumber
0

$('select#id').val($('#id option')[index].value)

Ganti id dengan id tag pilih tertentu dan indeks dengan elemen tertentu yang ingin Anda pilih.

yaitu

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Jadi di sini untuk pemilihan elemen pertama saya akan menggunakan kode berikut:

$('select#ddlState').val($('#ddlState option')[0].value)
Hitesh Kalwani
sumber
-1

Menggunakan:

alert($( "#target option:first" ).text());
GobsYats
sumber