Làm cách nào để có được nhiều giá trị hộp chọn bằng jQuery?


Câu trả lời:



291

Sử dụng .val()hàm trên danh sách đa lựa chọn sẽ trả về một mảng các giá trị được chọn:

var selectedValues = $('#multipleSelect').val();

và trong html của bạn:

<select id="multipleSelect" multiple="multiple">
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

11
Điều gì nếu bạn muốn nhận được Text 1thay vì giá trị? Thay thế .val()bằng .text()?
Raza Ahmed

9
Đáng lưu ý rằng nhiều lựa chọn không có gì được chọn trả về nullthay vì một mảng trống. Điều này có nghĩa là nếu bạn lập trình thêm một giá trị đã chọn, bạn có một chút tung hứng để làm cho đúng.
Leo

Cảm ơn bạn! Có rất nhiều cách để có được giá trị từ một phần tử với jQuery mà chắc chắn đó là một cuộc đấu tranh để tìm ra cách mà bạn đang tìm kiếm.
Charles Wood

5
@Leo bạn có thể thêm một coalesc để giải quyết vấn đề null, ví dụ var selectedValues = $('#multipleSelect').val() || []; đáng chú ý là nó trả về một chuỗi các chuỗi. Tôi đã so sánh với một số nguyên và không nhận được kết quả trùng khớp, vì vậy tôi đã thêm một .toString().
tkerwood

16

Bạn cũng có thể sử dụng chức năng bản đồ js:

$("#multipleSelect :selected").map(function(i, el) {
    return $(el).val();
}).get();

Và sau đó bạn có thể nhận được bất kỳ thuộc tính nào của optionphần tử:

return $(el).text();
return $(el).data("mydata");
return $(el).prop("disabled");
etc...

2
câu trả lời tuyệt vời, nhưng không cần phải trả thêm chi phí gói elnhư một đối tượng jQuery cho mỗi tùy chọn duy nhất. Chỉ cần đi thẳng ra khỏi DOM khi nó không quá lạ. Bạn có thể thay đổi $(el).val()thành chỉ el.value. Tất nhiên, nếu bạn đã quen với jQuery hoặc muốn lấy dữ liệu hoặc thuộc tính như các ví dụ khác của bạn, jQuery sẽ không làm tổn thương bất cứ ai.
KyleMit

1
@KyleMit Mẹo tuyệt vời. Chỉ cần sử dụng phương pháp này để lấy một tập hợp các giá trị trường ẩn và nó hoạt động hoàn hảo.
EvilDr

12
var selected=[];
 $('#multipleSelect :selected').each(function(){
     selected[$(this).val()]=$(this).text();
    });
console.log(selected);

Một sự chấp thuận khác cho vấn đề này. Mảng được chọn sẽ có các chỉ mục là các giá trị tùy chọn và mỗi mục mảng sẽ có văn bản là giá trị của nó.

ví dụ

<select id="multipleSelect" multiple="multiple">
    <option value="abc">Text 1</option>
    <option value="def">Text 2</option>
    <option value="ghi">Text 3</option>
</select>

nếu nói tùy chọn 1 và 2 được chọn.

mảng được chọn sẽ là:

selected['abc']=1; 
selected['def']=2.

5

Chỉ bằng một dòng-

var select_button_text = $('#SelectQButton option:selected')
                .toArray().map(item => item.text);

Đầu ra: ["text1", "text2"]

var select_button_text = $('#SelectQButton option:selected')
                .toArray().map(item => item.value);

Đầu ra: ["value1", "value2"]

Nếu bạn sử dụng .join ()

var select_button_text = $('#SelectQButton option:selected')
                .toArray().map(item => item.text).join();

Đầu ra: text1, text2, text3


4

Mã HTML:

 <select id="multiple" multiple="multiple" name="multiple">
  <option value=""> -- Select -- </option>
  <option value="1">Opt1</option>
  <option value="2">Opt2</option>
  <option value="3">Opt3</option>
  <option value="4">Opt4</option>
  <option value="5">Opt5</option>
 </select>   

Mã JQuery:

$('#multiple :selected').each(function(i, sel){ 
    alert( $(sel).val() ); 

});

Hy vọng nó hoạt động


13
Đừng "hy vọng nó hoạt động", nếu bạn không chắc đó có phải là câu trả lời hay không, hãy kiểm tra và chắc chắn!
Sterling Archer

6
Nếu bạn không chắc chắn về câu trả lời, thì đừng đăng nó .. !! chúng tôi không ở đây vì hy vọng .. !! LOL
Clain Dsilva

3
Chào bạn. Nó hoạt động hoàn hảo. Kiểm tra nó ra. Bạn nên hy vọng nó. Đừng đưa ra nhận xét không liên quan ..
Mitchhagaran

2
Đây là một cách sử dụng không hiệu quả của jQuery. Cách tiếp cận tốt hơn là mở đầu bằng bộ chọn ID như thế này: $('#multiple').find(':selected')@Prabhagaran
could_mutingly_borrow

@YounisShah Tôi khó có thể nói đó là "không hiệu quả" vì sự khác biệt về thời gian là tương đối không có gì ...
NorCalKnockOut

0

Nhận các giá trị được chọn trong dấu phẩy

var Accessids = "";
$(".multi_select .btn-group>ul>li input:checked").each(function(i,obj)
{
    Accessids=Accessids+$(obj).val()+",";
});
Accessids = Accessids.substring(0,Accessids.length - 1);
console.log(Accessids);

0

Chỉ cần sử dụng cái này

$('#multipleSelect').change(function() {
    var selectedValues = $(this).val();  
});
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.