Додавання параметрів до <select> за допомогою jQuery?


738

Який найпростіший спосіб додати option до спадного меню за допомогою jQuery?

Чи буде це працювати?

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

26
Або використовуйте $("#mySelect").html(....)для заміни поточних параметрів на нові.
Dan Diplo

Відповіді:


266

Це не працювало в IE8 (ще не було у FF):

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

Ця DID робота:

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, але ваш код працював на мене, дякую!
Олександр L Теллес

Також переконайтеся , що display: table;це НЕ застосовується в якості стилю для вибору елементів. Це порушить js-код
Гундон

1
Якщо вас цікавить, ось помилка, пов’язана з тим, як Options не працює з функцією append (), працює у FireFox, Chrome, але не в IE: bugs.jquery.com/ticket/1641
JackDev

2
+1 - працював для мене без необхідності «перевірити» об’єкт. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Авст

Є спосіб додати до цього значення "data-xxx"?
Педро Хоакін

817

Особисто я віддаю перевагу цьому синтаксису для додавання параметрів:

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

Якщо ви додаєте параметри з колекції предметів, ви можете зробити наступне:

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

23
це буде досить повільно, якщо ви додасте багато варіантів, порівняно зі створенням HTML-рядка та додаванням його
Клацніть Upvote

3
Працює в IE на відміну від безлічі рішень
DancesWithBamboo

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

4
дякую @dule, але як я можу зробити нову опцію вибраною за замовчуванням?
Lord_JABA

11
{вибрано: вірно}
jmadsen

114

Ви можете додати опцію, використовуючи наступний синтаксис. Також ви можете відвідати спосіб обробки в jQuery для отримання детальної інформації.

  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
перший повинен змінитися на $ ( "# SectionNames") Append ($ ( '<параметр>', {значення: 1, текст: "один"}).
EthenHY

1
Другий має неправильний атрибут у тезі опцій ( valueзамість val). Правильний код повинен бути$('select').append('<option value="1">One</option>');
вівторок

Дякую Діпу :))
Фокс

45

Якщо ім'я або значення параметра є динамічним, вам не доведеться турбуватися про те, щоб уникнути спеціальних символів у ньому; у цьому ви можете віддати перевагу простим методам DOM:

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

1
Мені це не так просто !!
Клацніть Upvote

27
З точки зору javascript це просто, jquery зробив речі надто легкими для людей
DWolf

document.getElementById ('mySelect'). add (нова опція ('Мій варіант', '1')); // якщо IE8 або вище
Hafthor

34

Варіант 1-

Ви можете спробувати це-

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

Подобається це-

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>

Варіант 2-

Або спробуйте це-

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

Подобається це-

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

Це дуже просто:

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

або

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

18

Це добре працює.

Якщо ви додаєте більше одного елемента опцій, я рекомендую виконувати додавання один раз, а не виконувати додавання на кожному елементі.


18

з будь-якої причини $("#myselect").append(new Option("text", "text"));робота в мені не працює в IE7 +

Мені довелося користуватися $("#myselect").html("<option value='text'>text</option>");


Я використовую той самий синтаксис (новий варіант (...) у браузері Android Chrome (по телефону), і він там також не працює.
raddevus

15

Для підвищення продуктивності вам слід спробувати змінити DOM лише один раз, тим більше, якщо ви додаєте багато варіантів.

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()для
поєднання

1
Це чудове рішення. У мене виникла проблема з тим, що "join ()" у прикладі не є дійсною функцією, але це рішення дозволяє використовувати jQuery "обіцянку", щоб визначити, коли всі параметри додано, і DOM буде оновлено. З іншими рішеннями, які додають параметри по черзі, це зробити не можна так просто. Замініть останній рядок у прикладі на наступний, щоб вчинити дії лише після завершення зміни DOM: $ .when ($ ('# select'). Append (html)). Done (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Америкус

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

8
Якщо я не помиляюся, для цього рішення потрібен не тільки jQuery, але й jQueryUI. selectmenu()не є частиною ядра jQuery і є віджетом jQueryUI . Це робить це досить важким рішенням, ні?
tatlar

13

Мені подобається використовувати підхід без jquery:

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

3
Мені подобається, що це не-jquery;) Не бачу цього занадто часто
Dakkaron

3
Так, і хоча я не можу ставити під сумнів jquery power, але є випадки, що це не спрощує речі.
caiohamamura

11

Ви можете додавати параметри динамічно у спадному меню, як показано нижче в прикладі. Ось у цьому прикладі я взяв дані масиву і прив’язав ці значення масиву до випадаючого, як показано на скріншоті виводу

Вихід:

введіть тут опис зображення

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

Не згадується в жодній відповіді, але корисним є випадок, коли ви хочете також вибрати цей варіант, ви можете додати:

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

1
Дякую, мені потрібен був попередній вибір параметра, створеного з json, і це працювало чудово.
Георг Патчайдер

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

Є два способи. Ви можете використовувати будь-який з цих двох.

Спочатку:

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

Друге:

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

3

Якщо ви хочете вставити нову опцію в конкретний індекс у вибраному:

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

Це додасть "Новий товар" як 3-й елемент у виділеному пункті.


3

Ви можете додати та встановити атрибут Value з текстом:

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

3

Ми знайшли певну проблему, коли ви додаєте параметр і використовуєте jquery validate. Виберіть один елемент у виборі декількох списків. Ви додасте цей код для обробки:

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

Як щодо цього

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

Це лише швидкі бали за найкращі показники

завжди, коли ви маєте справу з багатьма варіантами, побудуйте великий рядок, а потім додайте його до пункту "select" для найкращої продуктивності

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

Ще швидше

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

Якщо ви отримуєте дані від якогось об'єкта, тоді просто переадресуйте цей об’єкт для функціонування ...

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

Ім'я та Id - це назви властивостей об'єкта ... тож ви можете називати їх все, що завгодно ... І звичайно, якщо у вас є масив ... ви хочете створити власну функцію для циклу ..., а потім просто зателефонувати в цю функцію в документ готовий ... Ура


2

На підставі відповіді Dule в для додавання набору елементів, один лайнерfor...in буде творити чудеса:

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>

Як параметри об'єкта, так і індекси призначаються параметрам. Це рішення працює навіть у старому jQuery (v1.4) !


1

якщо у вас є optgroup всередині select , ви отримали помилку в DOM.

Я думаю, що найкращий спосіб:

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

1

Ви можете спробувати нижче код, щоб додати його до опції

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

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


1

Це так, як я це зробив, за допомогою кнопки для додавання кожного тегу вибору.

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

Чи має бути так$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Барік Дармаван

Так, ви маєте рацію з цим. У моїй відповіді не було готової заяви, оскільки я зосередився на тому, що вирішило проблему.
Рональд Валера Сантана

1

Це можна зробити в ES6:

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

1

Якщо хтось приходить сюди, шукає спосіб додати параметри з властивостями даних

Використання attr

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

Використання даних - додана версія 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.