JQuery kullanarak bir <select> seçeneğine ekleme?


739

optionJQuery kullanarak açılır menüye bir eklemenin en kolay yolu nedir ?

Bu işe yarayacak mı?

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

26
Veya $("#mySelect").html(....)mevcut seçenekleri yenileriyle değiştirmek için kullanın .
Dan Diplo

Yanıtlar:


266

Bu IE8'de işe yaramadı (henüz FF'de işe yaramadı):

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

Bu iş:

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
IE8 ile sorun yaşıyordum, ancak kodunuz benim için çalıştı, teşekkür ederim!
Alexandre L Telles

Ayrıca emin display: table;olduğunu DEĞİL seçme-elemana tarzı olarak başvurmuştur. Bu js kodunu kıracak
Gundon

1
İlginizi çekiyorsa, seçeneklerin append () ile çalışmadığı, FireFox, Chrome'da nasıl çalıştığı, ancak IE'de çalışmadığıyla ilgili hata: bugs.jquery.com/ticket/1641
JackDev

2
+1 - Nesneyi 'jquerify' etmek zorunda kalmadan benim için çalıştı. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Aust

Buna "data-xxx" değerleri eklemenin bir yolu var mı?
Pedro Joaquín

817

Şahsen ben bu sözdizimini ekleme seçenekleri için tercih ediyorum:

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

Bir öğe koleksiyonundan seçenekler ekliyorsanız, aşağıdakileri yapabilirsiniz:

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

23
bir html dizesi oluşturmak ve
eklemekle

3
Birçok çözüm aksine IE'de çalışır
DancesWithBamboo

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

4
teşekkürler @dule, ancak varsayılan olarak yeni seçeneği nasıl seçebilirim?
Lord_JABA

11
{seçili: doğru}
jmadsen

115

Aşağıdaki sözdizimini kullanarak seçenek ekleyebilirsiniz. Ayrıca , daha fazla bilgi için jQuery'de yol işleme seçeneğini ziyaret edebilirsiniz .

  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
birincisi $ ("# SectionNames") olarak değiştirilmelidir. append ($ ('<option>', {value: 1, text: "one"})
EthenHY 28:14

1
İkincisinin seçenek etiketinde ( valueyerine val) yanlış bir özelliği var . Doğru kod olmalıdır$('select').append('<option value="1">One</option>');
todd

Teşekkürler Dipu :))
Fox

45

Seçenek adı veya değeri dinamikse, içindeki özel karakterlerden kaçmak konusunda endişelenmek istemezsiniz; burada basit DOM yöntemlerini tercih edebilirsiniz:

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

1
Benim için o kadar basit gözükmüyor !!
Click Olumlu oy

27
Bu javascript açısından basit, jquery işleri insanlar için çok kolay hale getirdi
DWolf

document.getElementById ('mySelect'). add (yeni Seçenek ('Seçenekim', '1')); // IE8 veya daha iyisi ise
Hafthor

34

Seçenek 1-

Bunu deneyebilirsiniz-

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

Bunun gibi-

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>

Seçenek 2-

Veya şunu deneyin-

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

Bunun gibi-

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

Bu çok basit:

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

veya

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

18

İyi çalışıyor.

Birden fazla seçenek öğesi ekliyorsanız, her öğeye bir ekleme işlemi uygulamak yerine, eki bir kez gerçekleştirmenizi öneririm.


18

herhangi bir nedenle $("#myselect").append(new Option("text", "text"));IE7 + 'da benim için çalışmıyor

Kullanmak zorundaydım $("#myselect").html("<option value='text'>text</option>");


Aynı sözdizimini (yeni Seçenek (...) Android Chrome tarayıcıda (telefonda) kullanıyorum ve orada da çalışmıyor.
raddevus

15

Performansa yardımcı olmak için, DOM'u yalnızca bir kez değiştirmeye çalışmalısınız, daha fazla seçenek ekliyorsanız daha da fazla.

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
string.join()dizeleri birleştirmek için kullanmanız gereken performansa yardımcı olmak için
mfeineis

1
Bu harika bir çözüm. Geçerli bir işlev olmayan örnekte "join ()" ile ilgili bir sorun vardı, ama bu çözüm tüm seçenekler eklendiğinde ve DOM güncelleme tamamlandığında belirlemek için bir jQuery "söz" kullanmanıza izin verir. Seçenekleri birer birer ekleyen diğer çözümlerle, bu kadar kolay yapılamaz. Yalnızca DOM değişikliği tamamlandıktan sonra işlem yapmak için örnekteki son satırı aşağıdakiyle değiştirin: $ .when ($ ('# select'). Append (html)). Done (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Americus

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

8
Yanılmıyorsam, bu çözüm sadece jQuery değil, aynı zamanda jQueryUI gerektirir. selectmenu()jQuery çekirdeğinin bir parçası değildir ve bir jQueryUI widget'idir . Bu onu oldukça ağır bir çözüm haline getiriyor, değil mi?
tatlar

13

Jquery olmayan bir yaklaşım kullanmayı seviyorum:

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

3
Ben jquery olmayan olmak gibi;) Çok sık görmüyorum
Dakkaron

3
Evet ve jquery gücünü sorgulayamama rağmen, işleri basitleştirmeyen durumlar var.
caiohamamura

11

Aşağıdaki örnekte gösterildiği gibi açılır listeye seçenekleri dinamik olarak ekleyebilirsiniz. Burada bu örnekte dizi verisi aldım ve bu dizi değerini çıktı ekran görüntüsünde gösterildiği gibi açılır listeye bağladım

Çıktı:

resim açıklamasını buraya girin

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

Herhangi bir cevapta belirtilmemiş, ancak bu seçeneğin de seçilmesini istediğiniz durum yararlıdır, şunları ekleyebilirsiniz:

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

1
Teşekkürler, ben json oluşturulan bir seçenek seçmek gerekiyordu ve bu güzel çalıştı.
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

İki yol var. Bu ikisinden birini kullanabilirsiniz.

İlk:

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

İkinci:

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

3

Yeni seçeneği, seçimdeki belirli bir dizine eklemek istiyorsanız:

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

Bu, seçimdeki 3. öğe olarak "Yeni Öğe" yi ekleyecektir.


3

Metin ile Değer özniteliğini ekleyebilir ve ayarlayabilirsiniz:

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

3

Seçeneği eklediğinizde ve jquery validate kullandığınızda bir sorun bulduk. Birden fazla liste seçmek için bir öğeyi tıklamanız gerekir. Bu kodu işlemek için ekleyeceksiniz:

$("#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

Buna ne dersin

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

Bu sadece en iyi performans için hızlı bir noktadır

her zaman birçok seçenekle uğraşırken, büyük bir dize oluşturun ve ardından en iyi performans için 'seç'e ekleyin

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');

Daha hızlı

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);
});

Bir nesneden veri alırsanız, o nesneyi işlevine iletmeniz yeterlidir ...

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

Ad ve Kimlik, nesne özelliklerinin adlarıdır ... bu yüzden istediğiniz her şeyi çağırabilirsiniz ... Ve Array'ınız varsa tabii ki ... döngü için özel işlev oluşturmak istiyorsunuz ... ve sonra bu işlevi belge hazır ... Şerefe


2

Dule'un bir öğe koleksiyonu ekleme cevabına dayanarak , bir astarfor...in da harikalar yaratacak:

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>

Seçeneklere hem nesne değerleri hem de dizinler atanır. Bu çözüm eski jQuery'de (v1.4) bile çalışır !


1

u seçin içinde optgroup varsa , u DOM hata var.

Bence en iyi yol:

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

1

U seçeneği eklemek için aşağıdaki kodu deneyebilirsiniz

  <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

Her seçim etiketini eklemek için bir düğme ile bunu yaptım.

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

$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Olmalı

Evet, bu konuda haklısın. Cevabım hazır ifadeyi içermiyordu çünkü sorunu neyin çözdüğüne odaklandım.
Ronald Valera Santana

1

Bunu ES6'da yapabilirsiniz:

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

1

Birisi buraya veri özelliklerine sahip seçenekler eklemenin bir yolunu arıyorsa

Attr kullanma

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

Verileri kullanma - sürüm eklendi 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.