2012-06-29 30 views
28

Tôi có một tệp văn bản mà tôi đang đọc và lưu trữ dữ liệu trong một mảng javascript, đó là danh sách các món ăn. Tôi muốn sử dụng mảng để điền vào một hộp chọn thả xuống. Tôi biết làm thế nào để mã cứng trong các giá trị cho hộp thả xuống (sử dụng đúng cho tôi nếu tôi sai) nhưng tôi muốn để có thể sử dụng các mảng để điền nó lên để thay thế.sử dụng một mảng javascript để điền vào một hộp chọn thả xuống

<script type="text/javascript"> 
var cuisines = ["Chinese","Indian"];    
</script> 

<select id="CusineList"></select> 

tôi đã cứng mã hoá một mảng để đơn giản, "CuisineList" là thả tôi xuống hộp

+0

có thể trùng lặp: http://stackoverflow.com/questions/6601028/how-to-populate-the-options-of-a-select-element-in-javascript –

+0

Nếu bạn đang đọc tệp văn bản này trên máy chủ , bạn có thể muốn tạo mảng bằng cách sử dụng PHP hoặc bất kỳ ngôn ngữ máy chủ nào bạn đang sử dụng. – davidgoli

Trả lời

64

Sử dụng một vòng lặp for để lặp qua mảng của bạn. Đối với mỗi chuỗi, hãy tạo thành phần option mới, gán chuỗi làm innerHTMLvalue, sau đó nối nó vào phần tử select.

var cuisines = ["Chinese","Indian"];  
var sel = document.getElementById('CuisineList'); 
for(var i = 0; i < cuisines.length; i++) { 
    var opt = document.createElement('option'); 
    opt.innerHTML = cuisines[i]; 
    opt.value = cuisines[i]; 
    sel.appendChild(opt); 
} 

DEMO

UPDATE: Sử dụng createDocumentFragmentforEach

Nếu bạn có một danh sách rất lớn của các yếu tố mà bạn muốn thêm vào một tài liệu, nó có thể không performant để nối thêm mỗi phần tử mới riêng lẻ. DocumentFragment hoạt động như một đối tượng tài liệu có trọng lượng nhẹ có thể được sử dụng để thu thập các phần tử. Khi tất cả các phần tử của bạn đã sẵn sàng, bạn có thể thực thi một hoạt động appendChild đơn lẻ để DOM chỉ cập nhật một lần, thay vì n lần.

var cuisines = ["Chinese","Indian"];  

var sel = document.getElementById('CuisineList'); 
var fragment = document.createDocumentFragment(); 

cuisines.forEach(function(cuisine, index) { 
    var opt = document.createElement('option'); 
    opt.innerHTML = cuisine; 
    opt.value = cuisine; 
    fragment.appendChild(opt); 
}); 

sel.appendChild(fragment); 

DEMO

+0

Nó được viết là "CusineList" trong câu hỏi gốc – Wardruna

+0

là có cách nào để dừng phần tử chọn hiển thị trống trong một giây sau khi các tùy chọn được thêm vào không? – Ferguzz

4

Đây là một phần từ một REST Dịch vụ Tôi đã viết gần đây.

var select = $("#productSelect") 
for (var prop in data) { 
    var option = document.createElement('option'); 
    option.innerHTML = data[prop].ProduktName 
    option.value = data[prop].ProduktName; 
    select.append(option) 
} 

Lý do tại sao im đăng bài này là vì appendChild() không hoạt động trong trường hợp của tôi nên tôi quyết định đưa ra một khả năng khác hoạt động tốt.

+0

Làm cách nào tôi có thể thêm tùy chọn như "Lựa chọn" làm tùy chọn đầu tiên? –

Các vấn đề liên quan