Bagaimana cara saya mengatur nilai elemen kotak pilih menggunakan pemrograman JavaScript?


421

Saya memiliki <select>elemen HTML berikut :

<select id="leaveCode" name="leaveCode">
  <option value="10">Annual Leave</option>
  <option value="11">Medical Leave</option>
  <option value="14">Long Service</option>
  <option value="17">Leave Without Pay</option>
</select>

Menggunakan fungsi JavaScript dengan leaveCodeangka sebagai parameter, bagaimana cara memilih opsi yang sesuai dalam daftar?


lihat jawaban saya untuk perbandingan kinerja untuk metode yang berbeda
Toskan

Jawaban:


532

Anda dapat menggunakan fungsi ini:

selectElement('leaveCode', '11')

function selectElement(id, valueToSelect) {    
    let element = document.getElementById(id);
    element.value = valueToSelect;
}

4
Jawaban yang bagus, ini jauh lebih mudah daripada perulangan melalui opsi. Dan itu sesuai standar: dev.w3.org/html5/spec/… . Jika ada browser yang tidak kompatibel (tentu saja ada :) Saya akan sangat tertarik untuk mengetahui apa itu browser. Itulah hal yang biasanya Anda andalkan untuk ppk, tetapi dia dengan keras kepala menolak untuk muncul dalam pencarian saya untuk topik ini.
philo

9
Dan bagaimana dengan banyak pilihan? Tampaknya ini tidak berfungsi jika ada beberapa opsi (setidaknya di Chrome 25).
Georgii Ivankin

2
Seperti @ ring0 tunjukkan, ketika valueToSelect tidak ada, itu memasukkan entri kosong di chrome. sedangkan IE dan firefox mempertahankan nilai yang dipilih terakhir.
Karthik Bose

1
Catatan untuk IE: <option> harus memiliki atribut value = 'valueToSelect'. Anda tidak dapat menggunakan teks tampilan dalam <option> .. </option> sebagai valueToSelect
Peter Quiring

4
Jika Anda perlu acara perubahan untuk dipecat, Anda juga harus melakukan: element.dispatchEvent(new Event('change'));
Patrick James McDougle

120

Jika Anda menggunakan jQuery, Anda juga dapat melakukan ini:

$('#leaveCode').val('14');

Ini akan memilih <option>dengan nilai 14.


Dengan Javascript biasa, ini juga dapat dicapai dengan dua Documentmetode :

  • Dengan document.querySelector, Anda dapat memilih elemen berdasarkan pemilih CSS:

    document.querySelector('#leaveCode').value = '14'
  • Menggunakan pendekatan yang lebih mapan dengan document.getElementById(), yang akan, sesuai dengan nama fungsi, memungkinkan Anda memilih elemen berdasarkan id:

    document.getElementById('leaveCode').value = '14'

Anda dapat menjalankan kode di bawah ini untuk melihat metode ini dan fungsi jQuery dalam aksi:


4
Ini juga dapat digunakan untuk multi-pilih; cukup lewati array string ke fungsi 'val' alih-alih string tunggal. Lihat: stackoverflow.com/a/16583001/88409
Triynko

Apakah ada cara untuk juga memicu $ ('# leaveCode'). On ('change', function () dengan melakukan itu?
Lieuwe

5
$ ("# leaveCode"). val ("14"). ubah ();
Loren

29
function setSelectValue (id, val) {
    document.getElementById(id).value = val;
}
setSelectValue('leaveCode', 14);

16

Tidak menjawab pertanyaan, tetapi Anda juga dapat memilih berdasarkan indeks, di mana saya adalah indeks dari item yang ingin Anda pilih:

var formObj = document.getElementById('myForm');
formObj.leaveCode[i].selected = true;

Anda juga dapat mengulang item untuk memilih berdasarkan nilai tampilan dengan loop:

for (var i = 0, len < formObj.leaveCode.length; i < len; i++) 
    if (formObj.leaveCode[i].value == 'xxx') formObj.leaveCode[i].selected = true;

4
Tidak boleh formObj.leaveCode [i] .selected = true; menjadi formObj.options [i] .selected = true; ?
David Christopher Reynolds

14

Saya membandingkan berbagai metode:

Perbandingan berbagai cara tentang cara menetapkan nilai pilih dengan JS atau jQuery

kode:

$(function() {
    var oldT = new Date().getTime();
     var element = document.getElementById('myId');
    element.value = 4;
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId option").filter(function() {
        return $(this).attr('value') == 4;
    }).attr('selected', true);
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId").val("4");
    console.error(new Date().getTime() - oldT);
});

Output pada pilih dengan ~ 4000 elemen:

  • 1 ms
  • 58 ms
  • 612 ms

Dengan Firefox 10. Catatan: Satu-satunya alasan saya melakukan tes ini, adalah karena jQuery berkinerja sangat buruk pada daftar kami dengan ~ 2000 entri (mereka memiliki teks yang lebih panjang di antara opsi-opsi). Kami mengalami keterlambatan sekitar 2 detik setelah val ()

Catatan juga: Saya menetapkan nilai tergantung pada nilai sebenarnya, bukan nilai teks.


10
document.getElementById('leaveCode').value = '10';

Itu harus mengatur seleksi ke "Cuti Tahunan"


9

Saya mencoba solusi berbasis JavaScript / jQuery di atas, seperti:

$("#leaveCode").val("14");

dan

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;

dalam aplikasi AngularJS, di mana ada elemen <select> yang diperlukan .

Tidak ada yang berfungsi, karena validasi formulir AngularJS tidak dipecat. Meskipun opsi yang tepat telah dipilih (dan ditampilkan dalam formulir), input tetap tidak valid (kelas ng-murni dan ng-tidak valid masih ada).

Untuk memaksa validasi AngularJS, panggil perubahan jQuery () setelah memilih opsi:

$("#leaveCode").val("14").change();

dan

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;
$(leaveCode).change();

Mengapa menggunakan jQuery untuk ini ketika Anda sudah bisa melakukannya dengan Angular? Saat menggunakan Angular sendiri, jangan Anda memiliki kemampuan untuk menetapkan nilai, dengan dukungan bawaan untuk memicu perubahan (Tidak tahu, saya menggunakan React, baru saja menemukan posting ini setelah 5 detik google: stackoverflow.com/questions/ 50302062 / ... )? Karena itu berarti Anda tidak perlu meretas Angular dengan perpustakaan ± 30kb tambahan "hanya untuk ini" :)
SidOfc

3

function foo(value)
{
    var e = document.getElementById('leaveCode');
    if(e) e.value = value;
}


3

Cara termudah jika Anda perlu:
1) Klik tombol yang mendefinisikan opsi pilih
2) Pergi ke halaman lain, di mana opsi pilih adalah
3) Apakah nilai opsi itu dipilih pada halaman lain

1) tautan tombol Anda (misalnya, di beranda)

<a onclick="location.href='contact.php?option=1';" style="cursor:pointer;">Sales</a>
<a onclick="location.href='contact.php?option=2';" style="cursor:pointer;">IT</a>

(di mana contact.php adalah halaman Anda dengan opsi pilih. Perhatikan url halaman memiliki? option = 1 atau 2)

2) letakkan kode ini di halaman kedua Anda (case. contact.php saya )

<?
if (isset($_GET['option']) && $_GET['option'] != "") {
$pg = $_GET['option'];              
} ?>

3) membuat nilai opsi dipilih, tergantung pada tombol yang diklik

<select>
<option value="Sales" <? if ($pg == '1') { echo "selected"; } ?> >Sales</option>
<option value="IT" <? if ($pg == '2') { echo "selected"; } ?> >IT</option>
</select>

.. dan seterusnya.
Jadi ini adalah cara mudah untuk meneruskan nilai ke halaman lain (dengan daftar opsi pilih) melalui GET di url. Tidak ada formulir, tidak ada ID .. hanya 3 langkah dan itu berfungsi sempurna.


1

Mengapa tidak menambahkan variabel untuk ID elemen dan menjadikannya fungsi yang dapat digunakan kembali?

function SelectElement(selectElementId, valueToSelect)
{    
    var element = document.getElementById(selectElementId);
    element.value = valueToSelect;
}

1

Misalkan formulir Anda bernama form1 :

function selectValue(val)
{
  var lc = document.form1.leaveCode;
  for (i=0; i&lt;lc.length; i++)
  {
    if (lc.options[i].value == val)
    {
        lc.selectedIndex = i;
        return;
    }
  }
}

1

Seharusnya ada sesuatu seperti ini:

function setValue(inVal){
var dl = document.getElementById('leaveCode');
var el =0;
for (var i=0; i<dl.options.length; i++){
  if (dl.options[i].value == inVal){
    el=i;
    break;
  }
}
dl.selectedIndex = el;
}

-1

Jika menggunakan PHP Anda dapat mencoba sesuatu seperti ini:

$value = '11';
$first = '';
$second = '';
$third = '';
$fourth = '';

switch($value) {
            case '10' :
                $first = 'selected';
            break;
            case '11' :
                $second = 'selected';
            break;
            case '14' :
                $third = 'selected';
            break;
            case '17' :
                $fourth = 'selected';
            break;
        }

echo'
<select id="leaveCode" name="leaveCode">
  <option value="10" '. $first .'>Annual Leave</option>
  <option value="11" '. $second .'>Medical Leave</option>
  <option value="14" '. $third .'>Long Service</option>
  <option value="17" '. $fourth .'>Leave Without Pay</option>
</select>';

-1

Anda kemungkinan besar menginginkan ini:

$("._statusDDL").val('2');

ATAU

$('select').prop('selectedIndex', 3); 

8
Ini dengan asumsi OP menggunakan JQuery
Barry Michael Doyle

2
@ BarryMichaelDoyle, Yang tidak, karena bahkan judul pertanyaan berakhir dengan using JavaScript.
Iulian Onofrei

-1
function selecetElement() {
 var selectedValue = document.getElementById('leaveCode');
 selectedValue.value = "11";
}

3
Saat menambahkan jawaban ke pertanyaan berumur sebelas tahun dengan enam belas jawaban yang ada, sangat penting untuk menunjukkan aspek baru dari pertanyaan yang dijawab oleh jawaban Anda. Jika tidak dan perubahan Anda tidak kentara, mungkin terlewatkan dan jawaban Anda dihapus sebagai duplikat yang terlambat. Kode hanya jawaban hampir selalu dapat ditingkatkan dengan menambahkan beberapa penjelasan tentang bagaimana dan mengapa mereka bekerja.
Jason Aller

-6

Saya khawatir saya tidak dapat menguji ini saat ini, tetapi di masa lalu, saya percaya saya harus memberikan setiap opsi tag ID, dan kemudian saya melakukan sesuatu seperti:

document.getElementById("optionID").select();

Jika itu tidak berhasil, mungkin itu akan membuat Anda lebih dekat ke solusi: P


3
The HTMLOptionElement tidak memiliki select()metode (tidak mendefinisikan metode tambahan atas set standar pada semua elemen HTML). Namun, Anda dapat mengatur selectedproperti menjadi true.
MrWhite
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.