Có một số cách để làm điều này, nhưng cách tiếp cận sạch nhất đã bị mất trong số các câu trả lời hàng đầu và vô số tranh luận val()
. Ngoài ra một số phương thức đã thay đổi kể từ jQuery 1.6, vì vậy điều này cần cập nhật.
Đối với các ví dụ sau tôi sẽ giả sử biến $select
là một đối tượng jQuery trỏ vào <select>
thẻ mong muốn , ví dụ thông qua các điều sau:
var $select = $('.selDiv .opts');
Lưu ý 1 - sử dụng val () cho giá trị khớp:
Để khớp giá trị, việc sử dụng val()
đơn giản hơn nhiều so với sử dụng bộ chọn thuộc tính: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
Phiên bản setter .val()
được triển khai trên select
các thẻ bằng cách đặt thuộc selected
tính khớp option
với cùng value
, do đó hoạt động tốt trên tất cả các trình duyệt hiện đại.
Lưu ý 2 - sử dụng prop ('được chọn', đúng):
Nếu bạn muốn trực tiếp đặt trạng thái đã chọn của một tùy chọn, bạn có thể sử dụng prop
(không attr
) với một boolean
tham số (thay vì giá trị văn bản selected
):
ví dụ: https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Lưu ý 3 - cho phép các giá trị không xác định:
Nếu bạn sử dụng val()
để chọn một <option>
, nhưng giá trị không khớp (có thể xảy ra tùy thuộc vào nguồn của các giá trị), thì "không có gì" được chọn và $select.val()
sẽ trả về null
.
Vì vậy, đối với ví dụ được hiển thị và vì mục đích mạnh mẽ, bạn có thể sử dụng một cái gì đó như thế này https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Lưu ý 4 - khớp văn bản chính xác:
Nếu bạn muốn khớp với văn bản chính xác, bạn có thể sử dụng filter
hàm có. ví dụ: https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
mặc dù nếu bạn có thể có thêm khoảng trắng, bạn có thể muốn thêm phần cắt vào kiểm tra như trong
return $.trim(this.text) == "some value to match";
Lưu ý 5 - khớp theo chỉ số
Nếu bạn muốn khớp theo chỉ mục, chỉ cần lập chỉ mục cho các mục con chọn, ví dụ: https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Mặc dù hiện tại tôi có xu hướng tránh các thuộc tính DOM trực tiếp có lợi cho jQuery, với mã chứng minh trong tương lai, do đó, điều đó cũng có thể được thực hiện như https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Lưu ý 6 - sử dụng thay đổi () để kích hoạt lựa chọn mới
Trong tất cả các trường hợp trên, sự kiện thay đổi không kích hoạt. Điều này là do thiết kế để bạn không gặp phải các sự kiện thay đổi đệ quy.
Để tạo sự kiện thay đổi, nếu cần, chỉ cần thêm một cuộc gọi đến đối tượng .change()
jQuery select
. ví dụ: ví dụ đơn giản đầu tiên trở thành https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Ngoài ra còn có nhiều cách khác để tìm các phần tử bằng cách sử dụng các bộ chọn thuộc tính [value="SEL2"]
, nhưng bạn phải nhớ các bộ chọn thuộc tính tương đối chậm so với tất cả các tùy chọn khác này.
$("#my_select").val("the_new_value").change();
... ... từ đó