2012-07-20 23 views
15

Tôi có đoạn code sauLấy giá trị được chọn trong một thẻ multiselect trong Javascript

function searchFlights() { 
    var select1 = document.getElementById("airports-select-1"); 
    var selected1 = []; 
    while(select1.selectedIndex != -1) { 
     if(select1.selectedIndex != 0) selected1.push(select1.options[select1.selectedIndex].value); 
     select1.options[select1.selectedIndex].selected = false; 
    } 

    console.log(selected1); 
} 

này hoạt động đúng, nhưng như bạn có thể nhìn thấy từ các mã dòng này:

select1.options[select1.selectedIndex].selected = false; 

là làm một bỏ chọn giá trị.

Bây giờ, tôi không muốn bỏ chọn các giá trị. Nếu tôi bỏ ghi chú dòng đó trong mã, mã sẽ chạy mãi mãi.

Có giải pháp tinh vi và tinh vi hơn nào để truy xuất nhiều giá trị từ thẻ được chọn bằng Javascript không?

Trả lời

37

Này sẽ không làm điều đó:

function searchFlights() { 
    var select1 = document.getElementById("airports-select-1"); 
    var selected1 = []; 
    for (var i = 0; i < select1.length; i++) { 
     if (select1.options[i].selected) selected1.push(select1.options[i].value); 
    } 
    console.log(selected1); 
}​ 

jsFiddle example

+2

Đó là câu trả lời. – aurora

0

Cập nhật cho năm 2018:

  • Nếu phần tử <select> chứa một thuộc tính selectedOptions, sử dụng bộ sưu tập đó. Các trình duyệt duy nhất vẫn còn lưu hành rộng rãi mà không hỗ trợ này là IE (bất kỳ phiên bản). Edge hỗ trợ nó.

  • Nếu điều này không được hỗ trợ, câu trả lời của @ j08691 vẫn còn đúng, nhưng như một tối ưu hóa hiệu suất mà bạn có thể bắt đầu lựa chọn iterating tại selectedIndex thay vì 0. Đây là chỉ mục của tùy chọn được chọn đầu tiên, hoặc -1 nếu không có gì được chọn.

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