Đặt chỉ mục được chọn của Dropdown bằng jQuery


165

Làm cách nào để đặt chỉ mục thả xuống trong jQuery nếu cách tôi tìm điều khiển như sau:

$("*[id$='" + originalId + "']") 

Tôi làm theo cách này vì tôi đang tạo các điều khiển một cách linh hoạt và vì các id được thay đổi khi sử dụng Biểu mẫu web, tôi thấy đây là một công việc xung quanh để tìm cho tôi một số điều khiển. Nhưng một khi tôi có đối tượng jQuery, tôi không biết cách đặt chỉ mục được chọn thành 0 (không).

Câu trả lời:


352

Trước hết - bộ chọn đó khá chậm. Nó sẽ quét mọi phần tử DOM để tìm id. Nó sẽ ít thành công hơn nếu bạn có thể gán một lớp cho phần tử.

$(".myselect")

Để trả lời câu hỏi của bạn, có một số cách để thay đổi giá trị phần tử được chọn trong jQuery

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

Có cách nào tốt hơn để làm điều đó? Tôi đã hình dung nó sẽ quét toàn bộ DOM tìm kiếm để khớp với ID, nhưng vì tôi mới sử dụng jQuery nên tôi đã tìm ra, hãy làm cho nó hoạt động và sau đó xem liệu có cách nào tốt hơn để làm điều đó không. Bất kỳ lời khuyên sẽ được đánh giá cao.
oz.

Có - nếu bạn có thể gán một lớp cho (các) phần tử bạn cần tìm, nó sẽ là một bộ chọn nhanh hơn nhiều.
gnarf

@gnarf không ID nhanh hơn?
KBN

#an-idnhanh hơn, nhưng *[id$=ends-with]chậm hơn, đó là ý nghĩa của việc "gán một lớp cho phần tử"
gnarf

Nếu tôi có nhiều DropDownList của ASP.net với giá trị chỉ mục được chọn khác nhau thì sao?
SearchForKnowledge

106

Chỉ cần tìm thấy điều này, nó hoạt động cho tôi và cá nhân tôi thấy nó dễ đọc hơn.

Điều này sẽ đặt chỉ mục thực tế giống như tùy chọn câu trả lời số 3 của gnarf.

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

Điều này đã không được sử dụng để làm việc nhưng hiện tại ... thấy lỗi: http://dev.jquery.com/ticket/1474

Phụ lục

Theo khuyến cáo trong các ý kiến ​​sử dụng:

$("select#elem").prop('selectedIndex', 0);


30
Và kể từ jQuery 1.6, bạn nên sử dụng .prop('selectedIndex', 0);bất kể có .attr()hoạt động hay không :)
gnarf

1
Đúng, nó trong thực tế có thể không hoạt động trong 1.7. xem câu trả lời được chấp nhận: stackoverflow.com/questions/8010664/
Kiếm

+1 cho phần phụ lục. Mã cũ của tôi đã bị hỏng do vấn đề này
BiLaL

11

Tôi đang viết câu trả lời này vào năm 2015 và vì một số lý do (có thể là các phiên bản cũ hơn của jQuery), không có câu trả lời nào khác phù hợp với tôi. Ý tôi là, họ thay đổi chỉ mục đã chọn, nhưng nó không thực sự phản ánh về việc thả xuống thực tế.

Đây là một cách khác để thay đổi chỉ mục và thực sự có nó phản ánh trong danh sách thả xuống:

$('#mydropdown').val('first').change();

1
Cảm ơn câu trả lời của bạn. Chỉ có câu trả lời này là có hiệu quả với tôi
Viraj Dhamal

Cũng trong năm 2015, tôi không gặp vấn đề gì với prop('selectedIndex', ...);(đã thử nghiệm với Chrome & Firefox) khi thay đổi lựa chọn.
Lambart

2
Đối với những gì đáng giá, cần chỉ ra rằng bạn đang làm khác ở đây đang kích hoạt một changesự kiện trên trình đơn thả xuống, đây cũng có thể là một sửa chữa / giải pháp hữu ích cho những người đang thay đổi lựa chọn bằng cách gọi prop('selectedIndex', ...), thay vì val(...). Có lẽ vấn đề là bạn đang nghe một changesự kiện, và đó là những gì không hiệu quả với bạn? Đúng là chỉ cần thay đổi property sẽ không gây ra bất kỳ sự kiện nào ...
Lambart

9

Tôi đang sử dụng

$('#elem').val('xyz');

để chọn phần tử tùy chọn có value = 'xyz'


9

Mã JQuery:

$("#sel_status").prop('selectedIndex',1);

Mã Jsp:

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

3

Bạn muốn lấy giá trị của tùy chọn đầu tiên trong phần tử chọn.

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

3

Để chọn tùy chọn thứ 2

$('#your-select-box-id :nth-child(2)').prop('selected', true);

Ở đây chúng ta thêm `kích hoạt ('thay đổi') để tạo ra sự kiện.

$('#your-select-box-id :nth-child(2)').prop('selected', true).trigger('change');

đây là một câu trả lời tốt hơn nhiều
Ben Deh Afghanistan

1
$("[id$='" + originalId + "']").val("0 index value");

sẽ đặt thành 0


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.