Menambahkan opsi ke <select> menggunakan jQuery?


739

Apa cara termudah untuk menambahkan optiondropdown menggunakan jQuery?

Akankah ini berhasil?

$("#mySelect").append('<option value=1>My option</option>');

26
Atau gunakan $("#mySelect").html(....)untuk mengganti opsi saat ini dengan yang baru.
Dan Diplo

Jawaban:


267

Ini TIDAK bekerja di IE8 (belum di FF):

$("#selectList").append(new Option("option text", "value"));

DID ini berfungsi:

var o = new Option("option text", "value");
/// jquerify the DOM object 'o' so we can use the html method
$(o).html("option text");
$("#selectList").append(o);

1
Saya mengalami masalah dengan IE8, tetapi kode Anda berfungsi untuk saya, terima kasih!
Alexandre L Telles

Pastikan display: table;juga TIDAK diterapkan sebagai gaya pada elemen-pilih. Ini akan memecahkan kode js
Gundon

1
Jika Anda tertarik, inilah bug yang berkaitan dengan bagaimana Opsi tidak bekerja dengan append () berfungsi di FireFox, Chrome, tetapi tidak di IE: bugs.jquery.com/ticket/1641
JackDev

2
+1 - Berfungsi untuk saya tanpa harus 'menodai' objek. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Aust

Ada cara untuk menambahkan nilai "data-xxx" ke ini?
Pedro Joaquín

817

Secara pribadi, saya lebih suka sintaks ini untuk opsi menambahkan:

$('#mySelect').append($('<option>', {
    value: 1,
    text: 'My option'
}));

Jika Anda menambahkan opsi dari koleksi item, Anda dapat melakukan hal berikut:

$.each(items, function (i, item) {
    $('#mySelect').append($('<option>', { 
        value: item.value,
        text : item.text 
    }));
});

23
ini akan sangat lambat jika Anda menambahkan banyak opsi, dibandingkan dengan hanya membangun string html dan menambahkannya
Klik Upvote

3
Bekerja di IE tidak seperti banyak solusi
DancesWithBamboo

3
@Ropitems={option1:{value:1,text:1},option2:{value:2,text:2}}
gamliela

4
terima kasih @ aturan, tetapi bagaimana saya bisa membuat opsi baru dipilih secara default?
Lord_JABA

11
{terpilih: true}
jmadsen

115

Anda dapat menambahkan opsi menggunakan sintaks berikut, Anda juga dapat mengunjungi cara menangani opsi di jQuery untuk detail lebih lanjut.

  1. $('#select').append($('<option>', {value:1, text:'One'}));

  2. $('#select').append('<option value="1">One</option>');

  3. var option = new Option(text, value); $('#select').append($(option));


1
yang pertama harus berubah menjadi $ ("# SectionNames"). append ($ ('<option>', {value: 1, text: "one"})
EthenHY

1
Yang kedua memiliki atribut yang salah dalam tag opsi ( valuebukan val). Kode yang benar harus$('select').append('<option value="1">One</option>');
todd

Terima kasih Dipu :))
Fox

45

Jika nama opsi atau nilainya dinamis, Anda tidak perlu khawatir untuk keluar dari karakter khusus di dalamnya; dalam hal ini Anda mungkin lebih suka metode DOM sederhana:

var s= document.getElementById('mySelect');
s.options[s.options.length]= new Option('My option', '1');

1
Tidak terlihat begitu sederhana bagiku !!
Klik Upvote

27
Ini sederhana dalam istilah javascript, jquery telah membuat banyak hal terlalu mudah bagi orang
DWolf

document.getElementById ('mySelect'). add (Opsi baru ('Opsi saya', '1')); // jika IE8 atau lebih baik
Hafthor

34

Pilihan 1-

Anda dapat mencoba ini-

$('#selectID').append($('<option>',
 {
    value: value_variable,
    text : text_variable
}));

Seperti ini-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append($('<option>',
     {
        value: i,
        text : "Option "+i 
    }));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>

Pilihan 2-

Atau coba ini-

$('#selectID').append( '<option value="'+value_variable+'">'+text_variable+'</option>' );

Seperti ini-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append( '<option value="'+i+'">'+'Option '+i+'</option>' );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>


20

Ini sangat sederhana:

$('#select_id').append('<option value="five" selected="selected">Five</option>');

atau

$('#select_id').append($('<option>', {
                    value: 1,
                    text: 'One'
                }));

18

Itu bekerja dengan baik.

Jika menambahkan lebih dari satu elemen opsi, saya sarankan melakukan append satu kali daripada melakukan append pada setiap elemen.


18

untuk alasan apa pun melakukan $("#myselect").append(new Option("text", "text"));tidak bekerja untuk saya di IE7 +

Saya harus menggunakan $("#myselect").html("<option value='text'>text</option>");


Saya menggunakan sintaks yang sama (Opsi baru (...) di browser Android Chrome (di telepon) dan tidak berfungsi di sana juga
raddevus

15

Untuk membantu kinerja, Anda harus mencoba hanya mengubah DOM sekali, terlebih lagi jika Anda menambahkan banyak opsi.

var html = '';

for (var i = 0, len = data.length; i < len; ++i) {
    html.join('<option value="' + data[i]['value'] + '">' + data[i]['label'] + '</option>');
}           

$('#select').append(html);

1
untuk membantu kinerja yang harus Anda gunakan string.join()untuk string gabungan
mfeineis

1
Ini solusi hebat. Saya punya masalah dengan "join ()" pada contoh tidak menjadi fungsi yang valid, tetapi solusi ini memungkinkan Anda untuk menggunakan "janji" jQuery untuk menentukan kapan semua opsi telah ditambahkan dan DOM selesai memperbarui. Dengan solusi lain yang menambahkan opsi satu per satu, ini tidak dapat dilakukan dengan mudah. Ganti baris terakhir dalam contoh dengan yang berikut ini untuk mengambil tindakan hanya setelah modifikasi DOM selesai: $ .when ($ ('# select'). Append (html)). Done (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Americus

13
$('#mySelect').empty().append('<option value=1>My option</option>').selectmenu('refresh');

8
Kecuali saya salah, solusi ini tidak hanya membutuhkan jQuery, tetapi juga jQueryUI. selectmenu()bukan bagian dari inti jQuery dan merupakan widget jQueryUI . Itu membuatnya menjadi solusi yang cukup berat, bukan?
tatlar

13

Saya suka menggunakan pendekatan non jquery:

mySelect.add(new Option('My option', 1));

3
Saya suka itu bukan jquery;) Jangan terlalu sering
melihatnya

3
Ya, dan meskipun saya tidak bisa mempertanyakan kekuatan jquery, ada kasus-kasus itu tidak menyederhanakan hal-hal.
caiohamamura

11

Anda dapat menambahkan opsi secara dinamis ke dalam dropdown seperti yang ditunjukkan pada contoh di bawah ini. Di sini, dalam contoh ini saya telah mengambil data array dan mengikat nilai array tersebut ke dropdown seperti yang ditunjukkan pada tangkapan layar keluaran

Keluaran:

masukkan deskripsi gambar di sini

var resultData=["Mumbai","Delhi","Chennai","Goa"]
$(document).ready(function(){
   var myselect = $('<select>');
     $.each(resultData, function(index, key) {
	     myselect.append( $('<option></option>').val(key).html(key) );
       });
      $('#selectCity').append(myselect.html());
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js">
</script>

<select  id="selectCity">

</select>


9

Tidak disebutkan dalam jawaban apa pun tetapi bermanfaat jika Anda ingin opsi itu juga dipilih, Anda dapat menambahkan:

var o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);

1
Terima kasih, saya perlu memilih opsi yang dihasilkan dari json dan ini bekerja dengan baik.
Georg Patscheider

9
var select = $('#myselect');
var newOptions = {
                'red' : 'Red',
                'blue' : 'Blue',
                'green' : 'Green',
                'yellow' : 'Yellow'
            };
$('option', select).remove();
$.each(newOptions, function(text, key) {
    var option = new Option(key, text);
    select.append($(option));
});

5

Ada dua cara. Anda dapat menggunakan salah satu dari keduanya.

Pertama:

$('#waterTransportationFrom').append('<option value="select" selected="selected">Select From Dropdown List</option>');

Kedua:

$.each(dataCollecton, function(val, text) {            
    options.append($('<option></option>').val(text.route).html(text.route));
});

3

Jika Anda ingin memasukkan opsi baru pada indeks tertentu di pilih:

$("#my_select option").eq(2).before($('<option>', {
    value: 'New Item',
    text: 'New Item'
}));

Ini akan memasukkan "Item Baru" sebagai item ke-3 di pilih.


3

Anda dapat menambahkan dan mengatur atribut Nilai dengan teks:

$("#id").append($('<option></option>').attr("value", '').text(''));
$("#id").append($('<option></option>').attr("value", '4').text('Financial Institutions'));

3

Kami menemukan beberapa masalah ketika Anda menambahkan opsi dan menggunakan validasi jquery. Anda harus mengklik satu item di beberapa daftar pilih. Anda akan menambahkan kode ini untuk menangani:

$("#phonelist").append("<option value='"+ 'yournewvalue' +"' >"+ 'yournewvalue' +"</option>");

$("#phonelist option:selected").removeAttr("selected"); // add to remove lase selected

$('#phonelist option[value=' + 'yournewvalue' + ']').attr('selected', true); //add new selected

https://i.stack.imgur.com/HOjIY.png


3

Bagaimana dengan ini

var numbers = [1, 2, 3, 4, 5];
var option = '';

for (var i=0;i<numbers.length;i++){
     option += '<option value="'+ numbers[i] + '">' + numbers[i] + '</option>';
    }

    $('#items').append(option);

2

Ini hanyalah poin cepat untuk kinerja terbaik

selalu ketika Anda berhadapan dengan banyak opsi, membangun string besar dan kemudian menambahkannya ke 'pilih' untuk kinerja terbaik

fg

var $ mySelect = $ ('# mySelect'); var str = '';

$.each(items, function (i, item) {
    // IMPORTANT: no selectors inside the loop (for the best performance)
    str += "<option value='" + item.value + "'> " + item.text + "</option>";
});
// you built a big string

$mySelect.html(str); // <-- here you add the big string with a lot of options into the selector.
$mySelect.multiSelect('refresh');

Bahkan lebih cepat

var str = ""; 
for(var i; i = 0; i < arr.length; i++){
    str += "<option value='" + item[i].value + "'> " + item[i].text + "</option>";
}    
$mySelect.html(str);
$mySelect.multiSelect('refresh');

2
$(function () {
     var option = $("<option></option>");
     option.text("Display text");
     option.val("1");
     $("#Select1").append(option);
});

Jika Anda mendapatkan data dari beberapa objek, maka teruskan objek itu berfungsi ...

$(function (product) {
     var option = $("<option></option>");
     option.text(product.Name);
     option.val(product.Id);
     $("#Select1").append(option);
});

Nama dan Id adalah nama properti objek ... sehingga Anda dapat memanggil mereka apa pun yang Anda suka ... Dan tentu saja jika Anda memiliki Array ... Anda ingin membangun fungsi kustom dengan for loop ... dan kemudian panggil saja fungsi itu di siap dokumen ... Ceria


2

Berdasarkan jawaban dule untuk menambahkan koleksi item, one-linerfor...in juga akan bekerja dengan sangat baik:

let cities = {'ny':'New York','ld':'London','db':'Dubai','pk':'Beijing','tk':'Tokyo','nd':'New Delhi'};

for(let c in cities){$('#selectCity').append($('<option>',{value: c,text: cities[c]}))}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select  id="selectCity"></select>

Nilai objek dan indeks ditugaskan untuk opsi. Solusi ini berfungsi bahkan di jQuery lama (v1.4) !


1

jika Anda memiliki optgroup di dalam pilih , Anda mendapat kesalahan dalam DOM.

Saya pikir cara terbaik:

$("#select option:last").after($('<option value="1">my option</option>'));

1

Anda dapat mencoba kode di bawah ini untuk menambahkan opsi

  <select id="mySelect"></select>

    <script>
          $("#mySelect").append($("<option></option>").val("1").html("My enter code hereoption"));
    </script>

1
$('#select_id').append($('<option>',{ value: v, text: t }));

1

Ini adalah cara saya melakukannya, dengan tombol untuk menambahkan setiap tag pilih.

$(document).on("click","#button",function() {
   $('#id_table_AddTransactions').append('<option></option>')
}

Apakah seharusnya$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Bariq Dharmawan

Ya, Anda benar tentang itu. Jawaban saya tidak termasuk pernyataan siap karena, saya fokus pada apa yang memecahkan masalah.
Ronald Valera Santana

1

Anda dapat melakukan ini di ES6:

$.each(json, (i, val) => {
    $('.js-country-of-birth').append(`<option value="${val.country_code}"> ${val.country} </option>`);
  });

1

Jika seseorang datang ke sini mencari cara untuk menambahkan opsi dengan properti data

Menggunakan attr

var option = $('<option>', { value: 'the_value', text: 'some text' }).attr('family', model.family);

Menggunakan data - versi ditambahkan 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
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.