Saya memiliki kotak pilih:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select>
Saya ingin menetapkan salah satu opsi sebagai "terpilih" berdasarkan indeks yang dipilih itu.
Misalnya, jika saya mencoba mengatur "Nomor 3", saya mencoba ini:
$('#selectBox')[3].attr('selected', 'selected');
Tetapi ini tidak berhasil. Bagaimana saya bisa mengatur opsi yang dipilih berdasarkan indeks itu menggunakan jQuery?
Terima kasih!
jquery
jquery-selectors
BoltClock
sumber
sumber
Jawaban:
CATATAN : jawaban tergantung pada jQuery 1.6.1+
Terima kasih atas komentarnya,
.get
tidak akan berfungsi karena mengembalikan elemen DOM, bukan jQuery. Ingatlah bahwa.eq
fungsi ini dapat digunakan di luar pemilih juga jika Anda mau.Anda juga dapat lebih singkat / mudah dibaca jika Anda ingin menggunakan nilainya , daripada mengandalkan memilih indeks tertentu :
Catatan:
.val(3)
berfungsi dengan baik untuk contoh ini, tetapi nilai non-numerik harus berupa string, jadi saya memilih string untuk konsistensi.(mis.
<option value="hello">Number3</option>
mengharuskan Anda untuk menggunakan.val("hello")
)sumber
.prop()
daripada.attr()
.Ini mungkin juga berguna, jadi saya pikir saya akan menambahkannya di sini.
Jika Anda ingin memilih nilai berdasarkan nilai item dan bukan indeks item itu maka Anda dapat melakukan hal berikut:
Daftar pilihan Anda:
Jquery:
Item yang dipilih akan menjadi "Nomor 2" sekarang.
sumber
.attr('selected', 'selected')
Perlu diketahui bahwa tidak boleh digunakan beberapa kali pada pilih yang sama, karena beberapa browser dapat menjadi bingung (dalam beberapa kasus mereka mulai menandai beberapa item dalam dom sebagaiselected=selected"
. Jika Anda perlu mengubah nilai yang dipilih lebih sering (misalnya pada tombol klik) gunakan.prop('selected', true)
seperti yang disarankan oleh Marc - Hanya memiliki banyak rasa sakit - dan membuang-buang waktu - karena masalah ini!Coba ini sebagai gantinya:
sumber
Lebih sederhana:
sumber
ketika Anda ingin memilih dengan cara teratas untuk mengatur pilihan, Anda dapat menggunakan
$('#select option').removeAttr('selected');
untuk menghapus pilihan sebelumnya.sumber
Apa yang penting untuk dipahami adalah bahwa
val()
untuk suatuselect
elemen mengembalikan nilai opsi yang dipilih, tetapi bukan jumlah elemen seperti halnyaselectedIndex
dalam javascript.Untuk memilih opsi dengan
value="7"
Anda cukup menggunakan:Untuk membatalkan pilihan, gunakan array kosong:
Dan tentu saja Anda dapat memilih beberapa opsi *:
* Namun untuk memilih beberapa opsi,
<select>
elemen Anda harus memilikiMULTIPLE
atribut, jika tidak maka tidak akan berfungsi.sumber
Saya selalu mengalami masalah dengan prop ('terpilih'), berikut ini selalu berhasil untuk saya:
sumber
Coba ini:
Akhirnya, memicu acara .change:
sumber
Semoga ini bisa membantu juga
sumber
pilih opsi ke-3
Contoh di jsfiddle
sumber
NB:
salah, array deference memberi Anda objek dom, bukan objek jquery, sehingga akan gagal dengan TypeError, misalnya dalam FF dengan: "$ ('# selectBox option') [3] .attr () bukan fungsi . "
sumber
Untuk memperjelas jawaban Marc dan John Kugelman, Anda dapat menggunakan:
get()
tidak akan berfungsi jika digunakan dengan cara yang ditentukan karena mendapat objek DOM, bukan objek jQuery, jadi solusi berikut tidak akan berfungsi:eq()
mendapat filter set jQuery ke elemen dengan indeks yang ditentukan. Ini lebih jelas daripada$($('#selectBox option').get(3))
. Tidak semua yang efisien.$($('#selectBox option')[3])
lebih efisien (lihat test case ).Anda sebenarnya tidak membutuhkan objek jQuery. Ini akan melakukan trik:
http://api.jquery.com/get/
http://api.jquery.com/eq/
Satu hal lain yang sangat penting:
Atribut "terpilih" bukanlah bagaimana Anda menentukan tombol radio yang dipilih (setidaknya di Firefox dan Chrome). Gunakan atribut "dicentang":
Hal yang sama berlaku untuk kotak centang.
sumber
Di 1.4.4 Anda mendapatkan kesalahan: $ ("# selectBox option") [3] .attr bukan fungsi
Ini bekerja:
$('#name option:eq(idx)').attr('selected', true);
Di mana
#name
id pilih danidx
adalah nilai opsi yang ingin Anda pilih.sumber
Javascript murni SelectedIndex atribut adalah cara yang tepat untuk pergi karena, itu javascript murni dan bekerja lintas-browser:
Berikut adalah demo jsfiddle dengan dua dropdown menggunakan satu untuk mengatur yang lain:
Anda juga dapat memanggil ini sebelum mengubahIndex yang dipilih jika yang Anda inginkan adalah atribut "terpilih" pada tag opsi (di sini adalah biola ):
sumber
sumber
Saya sering menggunakan pemicu ('perubahan') untuk membuatnya bekerja
Contoh dengan id select = selectA1 dan position_index = 0 (opsi frist di pilih):
sumber
Saat menggunakan hal di atas saya terus mendapatkan kesalahan dalam webkit (Chrome) yang mengatakan:
"UnEught TypeError: Objek # tidak memiliki metode 'attr'"
Sintaks ini menghentikan kesalahan-kesalahan itu.
sumber
Pilih item berdasarkan nilai dalam daftar pilih (terutama jika nilai opsi memiliki spasi atau karakter aneh di dalamnya) dengan hanya melakukan ini:
Juga, jika Anda memiliki dropdown (bukan multi-pilih), Anda mungkin ingin melakukannya
break;
sehingga Anda tidak mendapatkan nilai pertama yang ditemukan ditimpa.sumber
Saya membutuhkan solusi yang tidak memiliki nilai kode keras dalam file js; menggunakan
selectedIndex
. Sebagian besar solusi yang diberikan gagal satu browser. Tampaknya ini berfungsi di FF10 dan IE8 (dapatkah orang lain menguji dalam versi lain)sumber
Jika Anda hanya ingin memilih item berdasarkan properti tertentu dari suatu item maka opsi jQuery ketik [prop = val] akan mendapatkan item itu. Sekarang saya tidak peduli dengan indeks saya hanya ingin item dengan nilainya.
sumber
Saya menghadapi masalah yang sama. Pertama, Anda harus melalui acara (yaitu acara mana yang terjadi terlebih dahulu).
Sebagai contoh:
Acara pertama menghasilkan kotak pilih dengan opsi.
Peristiwa kedua adalah memilih opsi default menggunakan fungsi apa pun seperti val () dll.
Anda harus memastikan bahwa acara Kedua harus terjadi setelah acara Pertama .
Untuk mencapai ini, ambil dua fungsi, misalkan generateSelectbox () (untuk membuat kotak pilih) dan selectDefaultOption ()
Anda perlu memastikan bahwa selectDefaultOption () harus dipanggil hanya setelah eksekusi generateSelectbox ()
sumber
Anda juga dapat memasukkan beberapa nilai jika kotak pilih Anda adalah multipl:
sumber
Anda dapat mengatur nilai variabel pilihan pilih secara dinamis serta opsi akan dipilih. Anda dapat mencoba kode berikut
kode:
KODE HTML:
sumber
Segera:
$("#selectBox").attr("selectedIndex",index)
di mana indeks adalah indeks yang dipilih sebagai bilangan bulat.
sumber