Thêm tùy chọn vào <select> bằng jQuery?


739

Cách dễ nhất để thêm optionmột danh sách thả xuống bằng jQuery là gì?

Điều này sẽ làm việc?

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

26
Hoặc sử dụng $("#mySelect").html(....)để thay thế các tùy chọn hiện tại bằng các tùy chọn mới.
Dan Diplo

Câu trả lời:


266

Điều này KHÔNG hoạt động trong IE8 (chưa làm trong FF):

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

DID này hoạt động:

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
Tôi đã gặp vấn đề với IE8, nhưng mã của bạn đã làm việc cho tôi, cảm ơn bạn!
Alexandre L kể

Ngoài ra hãy chắc chắn rằng display: table;KHÔNG áp dụng như phong cách để các yếu tố-chọn. Điều này sẽ phá vỡ mã js
Gundon

1
Nếu bạn quan tâm, đây là lỗi liên quan đến cách Tùy chọn không hoạt động với append () hoạt động trong FireFox, Chrome, nhưng không phải trong IE: bug.jquery.com/ticket/1641
JackDev

2
+1 - Làm việc cho tôi mà không phải 'chinh phục' đối tượng. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Aust

Có cách nào để thêm giá trị "data-xxx" vào đây không?
Pedro Joaquín

817

Cá nhân, tôi thích cú pháp này cho các tùy chọn nối thêm:

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

Nếu bạn đang thêm tùy chọn từ bộ sưu tập các mục, bạn có thể làm như sau:

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

23
điều này sẽ khá chậm nếu bạn thêm nhiều tùy chọn, so với việc chỉ xây dựng một chuỗi html và nối thêm nó
Nhấp vào Upvote

3
Hoạt động trong IE không giống như nhiều giải pháp
DancesWithBlyn

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

4
cảm ơn @dule, nhưng làm thế nào tôi có thể chọn tùy chọn mới theo mặc định?
Lord_JABA

11
{đã chọn: đúng}
jmadsen

115

Bạn có thể thêm tùy chọn bằng cú pháp sau, Ngoài ra, bạn có thể truy cập để xử lý tùy chọn trong jQuery để biết thêm chi tiết.

  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
cái đầu tiên sẽ thay đổi thành $ ("# MụcNames"). chắp thêm ($ ('<tùy chọn>', {value: 1, văn bản: "một"})
EthenHY

1
Cái thứ hai có một thuộc tính không chính xác trong thẻ tùy chọn ( valuethay vì val). Mã chính xác phải là$('select').append('<option value="1">One</option>');
chập chững vào

Cảm ơn Dipu :))
Fox

45

Nếu tên hoặc giá trị tùy chọn là động, bạn sẽ không phải lo lắng về việc thoát các ký tự đặc biệt trong đó; trong trường hợp này, bạn có thể thích các phương thức DOM đơn giản:

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

1
Trông tôi không đơn giản thế !!
Nhấp vào Upvote

27
Đây là đơn giản về javascript, jquery làm cho mọi thứ quá dễ dàng cho mọi người
DWolf

document.getEuityById ('mySelect'). add (Tùy chọn mới ('Tùy chọn của tôi', '1')); // nếu IE8 trở lên
Hafthor

34

Lựa chọn 1-

Bạn có thể thử điều này-

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

Như thế này-

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>

Lựa chọn 2-

Hoặc thử cái này-

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

Như thế này-

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

Điều này rất đơn giản:

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

hoặc là

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

18

Điều đó làm việc tốt.

Nếu thêm nhiều hơn một yếu tố tùy chọn, tôi khuyên bạn nên thực hiện nối thêm một lần thay vì thực hiện nối thêm trên mỗi thành phần.


18

vì lý do nào đó $("#myselect").append(new Option("text", "text"));không làm việc cho tôi trong IE7 +

Tôi đã phải sử dụng $("#myselect").html("<option value='text'>text</option>");


Tôi đang sử dụng cùng một cú pháp (Tùy chọn mới (...) trên trình duyệt Android Chrome (trên điện thoại) và nó cũng không hoạt động ở đó.
raddevus

15

Để giúp hiệu suất, bạn nên cố gắng chỉ thay đổi DOM một lần, thậm chí nhiều hơn nếu bạn thêm nhiều tùy chọn.

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
để giúp hiệu suất, bạn nên sử dụng string.join()để nối chuỗi
mfeineis

1
Đây là một giải pháp tuyệt vời. Tôi đã gặp vấn đề với "tham gia ()" trong ví dụ không phải là hàm hợp lệ, nhưng giải pháp này cho phép bạn sử dụng "lời hứa" của jQuery để xác định khi tất cả các tùy chọn đã được thêm và DOM đã cập nhật xong. Với các giải pháp khác thêm từng tùy chọn một, điều này không thể được thực hiện dễ dàng. Thay thế dòng cuối cùng trong ví dụ bằng dòng sau chỉ thực hiện một hành động sau khi sửa đổi DOM hoàn tất: $ .when ($ ('# select'). Append (html)). Thực hiện (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Americus

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

8
Trừ khi tôi nhầm, giải pháp này không chỉ yêu cầu jQuery mà còn cả jQueryUI. selectmenu()không phải là một phần của lõi jQuery và là một tiện ích jQueryUI . Điều đó làm cho nó một giải pháp khá nặng tay, phải không?
tatlar

13

Tôi thích sử dụng phương pháp không jquery:

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

3
Tôi thích nó không phải là
trò đùa

3
Vâng, và mặc dù tôi không thể đặt câu hỏi về sức mạnh của jquery, có những trường hợp nó không đơn giản hóa mọi thứ.
caiohamamura

11

Bạn có thể thêm các tùy chọn động vào danh sách thả xuống như trong ví dụ dưới đây. Ở đây trong ví dụ này tôi đã lấy dữ liệu mảng và liên kết các giá trị mảng đó với danh sách thả xuống như trong ảnh chụp màn hình đầu ra

Đầu ra:

nhập mô tả hình ảnh ở đây

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

Không được đề cập trong bất kỳ câu trả lời nào nhưng hữu ích là trường hợp bạn muốn tùy chọn đó cũng được chọn, bạn có thể thêm:

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

1
Cảm ơn, tôi cần phải chọn trước một tùy chọn được tạo từ json và điều này hoạt động tố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

Có hai cách. Bạn có thể sử dụng một trong hai.

Đầu tiên:

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

Thứ hai:

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

3

Nếu bạn muốn chèn tùy chọn mới vào một chỉ mục cụ thể trong phần chọn:

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

Điều này sẽ chèn "Mục mới" làm mục thứ 3 trong phần chọn.


3

Bạn có thể chắp thêm và đặt thuộc tính Giá trị bằng văn bản:

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

3

Chúng tôi đã tìm thấy một số vấn đề khi bạn thêm tùy chọn và sử dụng xác thực jquery. Bạn phải bấm vào một mục trong danh sách chọn nhiều. Bạn sẽ thêm mã này để xử lý:

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

Còn cái này thì sao

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

Đây chỉ là một điểm nhanh để có hiệu suất tốt nhất

luôn luôn khi bạn đang xử lý nhiều tùy chọn, xây dựng một chuỗi lớn và sau đó thêm nó vào 'select' để có hiệu suất tốt nhất

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

Thậm chí nhanh hơn

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

Nếu bạn nhận được dữ liệu từ một đối tượng nào đó, thì chỉ cần chuyển tiếp đối tượng đó để hoạt động ...

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

Tên và Id là tên của các thuộc tính đối tượng ... vì vậy bạn có thể gọi chúng là bất cứ thứ gì bạn thích ... Và dĩ nhiên nếu bạn có Mảng ... bạn muốn xây dựng hàm tùy chỉnh với vòng lặp for ... và sau đó chỉ cần gọi hàm đó trong tài liệu đã sẵn sàng ... Chúc mừng


2

Dựa trên câu trả lời của bộ đôi để nối thêm bộ sưu tập vật phẩm, một lớp lótfor...in cũng sẽ có tác dụng kỳ diệu:

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>

Cả hai giá trị đối tượng và chỉ mục được gán cho các tùy chọn. Giải pháp này hoạt động ngay cả trong jQuery(v1.4) !


1

Nếu bạn có optgroup bên trong chọn , bạn có lỗi trong DOM.

Tôi nghĩ một cách tốt nhất:

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

1

Bạn có thể thử mã dưới đây để thêm vào tùy chọn

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

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


1

Đây là cách tôi đã làm, với một nút để thêm từng thẻ chọn.

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

Liệu nó có nên$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Bariq Dharmawan

Vâng, bạn đúng về điều đó. Câu trả lời của tôi không bao gồm tuyên bố sẵn sàng bởi vì, tôi tập trung vào những gì đã giải quyết vấn đề.
Ronald Valera Santana

1

Bạn có thể làm điều này trong ES6:

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

1

Nếu ai đó đến đây đang tìm cách thêm tùy chọn với thuộc tính dữ liệu

Sử dụng attr

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

Sử dụng dữ liệu - phiên bản đã thêm 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.