Cách tốt nhất để bỏ chọn <select> trong jQuery?


219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

Cách tốt nhất, sử dụng jQuery, để bỏ chọn tùy chọn một cách thanh lịch là gì?

Câu trả lời:


347

Sử dụng removeAttr ...

$("option:selected").removeAttr("selected");

Hoặc Prop

$("option:selected").prop("selected", false)

3
Không hoạt động trong IE 8. Xem stackoverflow.com/questions/7960773/ Kẻ
Clinton Pierce

60
Câu trả lời này không phải là cách để làm mọi thứ (và không hoạt động phổ biến để khởi động). Các cách tiếp cận đúng là .val([])hoặc .prop("selected", false)- cuộn xuống.
Jon

1
JQuery phải sửa cái này, Nó hoạt động hoàn hảo với tôi trong IE8 khi sử dụng JQuery 1.7.2.
Mikey G

2
HOẶC .val (['']) để chọn giá trị trống nếu có.
Đánh dấu

2
$("option:selected").prop("selected", false)đôi khi không làm việc (không hoạt động trong trình duyệt chrome với jquery v1.4.2)
Rohit Goyani

163

Có rất nhiều câu trả lời ở đây nhưng thật không may, tất cả chúng đều khá cũ và do đó dựa vào attr/ removeAttrđó thực sự không phải là con đường để đi.

@coffeeyes xin vui lòng đề cập chính xác rằng một giải pháp đa trình duyệt tốt là sử dụng

$("select").val([]);

Một giải pháp đa trình duyệt tốt khác là

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

Bạn có thể thấy nó chạy tự kiểm tra ở đây . Đã thử nghiệm trên IE 7/8/9, FF 11, Chrome 19.


1
Tốt hơn nhiều so với câu trả lời được chọn, (hoạt động trên trình duyệt chéo và không liên quan đến việc gây rối với các bộ thuộc tính)
Timothy Groote

1
Câu trả lời hoàn hảo cho việc bỏ chọn tất cả các tùy chọn. Nhưng nó thực sự không thể được sử dụng để bỏ chọn các tùy chọn cụ thể, trong khi removeAttr có thể.
Mikey G

2
@MikeyG: Điều này , lưu ý rằng Array.indexOfcần một polyfill cho IE <9 (hoặc bạn có thể sử dụng bất kỳ phương thức tương đương nào mà nhiều thư viện JS cung cấp).
Jon

1
Bạn đã kiểm tra HTML sau $('#select').val([]);? Thật không may, điều này không loại bỏ selected="selected"thuộc tính. Điều đó có thể kết thúc việc đăng dữ liệu sai. Tôi không khuyên bạn nên tiếp cận phương pháp này!
Fr0zenFyr 04/05/2015

1
@ Fr0zenFyr: Nếu bạn bắt đầu với một tùy chọn được chọn trước và bạn bỏ chọn nó bằng tay với một cú nhấp chuột, thì điều đó cũng không xóa thuộc tính - và tất nhiên việc gửi biểu mẫu được đảm bảo để đăng dữ liệu chính xác. Có một thế giới khác biệt giữa các thuộc tính HTML (xác định trạng thái ban đầu) và các thuộc tính DOM (xác định những gì hiển thị và những gì được gửi). Trên thực tế đây là lý do tại sao các giải pháp tập trung vào thuộc tính không chính xác. Thuộc tính xác định giá trị ban đầu của thuộc tính, nhưng đó là tất cả.
Jon

24

Đã được một thời gian kể từ khi được hỏi và tôi đã không thử nghiệm điều này trên các trình duyệt cũ hơn nhưng dường như với tôi một câu trả lời đơn giản hơn nhiều

$("#selectID").val([]);

.val () cũng hoạt động để chọn http://api.jquery.com/val/


Đây là cách tốt nhất và thực sự xóa giá trị trong hầu hết các trình duyệt - cảm ơn.
SEO Sagive

Điều này chỉ hoạt động cho nhiều lựa chọn. $("select option").prop("selected", false);hoạt động phổ biến (trên nhiều lựa chọn và đơn).
giật gân

23

Phương pháp đơn giản nhất

$('select').val('')

Tôi chỉ đơn giản là sử dụng cái này trên chính nó và nó đã làm được điều đó.

Tôi đang sử dụng jQuery 1.7.1 .


1
Tôi chỉ phải đối mặt với một vấn đề về giải pháp này. Thẻ tùy chọn vẫn sẽ có thuộc tính "được chọn"
Tamara

@Tamara Thật sao? Tôi đã không kiểm tra. Bạn đang sử dụng "được chọn" cho một cái gì đó và điều này làm rối tung mọi thứ cho bạn?
Joshua Pinter

19

Câu trả lời cho đến nay chỉ hoạt động cho nhiều lựa chọn trong IE6 / 7; đối với lựa chọn không đa phổ biến hơn, bạn cần sử dụng:

$("#selectID").attr('selectedIndex', '-1');

Điều này được giải thích trong bài được liên kết bởi flyfishr64. Nếu bạn nhìn vào nó, bạn sẽ thấy có 2 trường hợp - đa / không đa. Không có gì ngăn cản bạn chaning cả hai cho một giải pháp hoàn chỉnh:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");

7

Ôi chao.

Vì vẫn chưa có cách tiếp cận javascript gốc, tôi cảm thấy cần phải cung cấp một cách tiếp cận.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

Và chỉ để cho bạn thấy điều này nhanh hơn bao nhiêu: điểm chuẩn


Cảm ơn câu trả lời này mà không cần jQuery! :)
Saromase

6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

Điều này sẽ lặp qua từng mục và bỏ chọn chỉ những mục được kiểm tra


5

Một google nhanh chóng tìm thấy bài đăng này mô tả cách thực hiện những gì bạn muốn cho cả danh sách chọn đơn và nhiều lựa chọn trong IE. Giải pháp có vẻ khá thanh lịch là tốt:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 


3
$(option).removeAttr('selected') //replace 'option' with selected option's selector

3

Cảm ơn rất nhiều cho giải pháp.

Giải pháp cho danh sách kết hợp lựa chọn duy nhất hoạt động hoàn hảo. Tôi tìm thấy điều này sau khi tìm kiếm trên nhiều trang web.

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");


2

Một cách đơn giản khác:

$("#selectedID")[0].selectedIndex = -1


1

Thông thường khi tôi sử dụng menu chọn, mỗi tùy chọn có một giá trị liên quan đến nó. Ví dụ

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

Bây giờ điều này không xóa thuộc tính được chọn khỏi tùy chọn nhưng tất cả những gì tôi thực sự muốn là giá trị.


0

Đặt id trong lựa chọn của bạn, như:
<select id="foo" size="2">

Sau đó, bạn có thể sử dụng:
$("#foo").prop("selectedIndex", 0).change();

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.