Làm cách nào để sử dụng jQuery để chọn tùy chọn thả xuống?


156

Tôi đã tự hỏi nếu có thể để jQuery chọn một mục <option>, giả sử mục thứ 4, trong hộp thả xuống?

<select>
    <option></option>
    <option></option>
    <option></option>
    <option></option>
    <option></option>
</select>

Tôi muốn người dùng nhấp vào một liên kết, sau đó <select>hộp thay đổi giá trị của nó, như thể người dùng đã chọn nó bằng cách nhấp vào <option>.


4
lựa chọn của bạn có một giá trị?
Victor

Câu trả lời:


183

Làm thế nào về

$('select>option:eq(3)').attr('selected', true);

ví dụ tại http://www.jsfiddle.net/gaby/CWvwn/


Đối với các phiên bản hiện đại của jquery, bạn nên sử dụng .prop()thay vì.attr()

$('select>option:eq(3)').prop('selected', true);

ví dụ tại http://jsfiddle.net/gaby/CWvwn/1763/


3
Imo này thậm chí không hoạt động; thay vào đó, trạng thái được chọn của một tùy chọn sẽ được kích hoạt bằng cách thay đổi trạng thái của lựa chọn đó :)
Ja͢ck

1
selectElement.selectedIndex = index;ý nghĩa của Jack là gì
rlemon

@rlemon, tôi hiểu, nhưng selectedIndexkhông thể được sử dụng cho nhiều lựa chọn khi multiplethuộc tính được sử dụng. Và cách thông thường ( html ) để đặt các phần tử được chọn là selectedthuộc tính của các optionphần tử.
Gabriele Petrioli

@ GabyakaG.Petrioli Cách thông thường thực sự là đặt thuộc selectedtính của từng thành optionsphần tương ứng thành true(và tùy chọn phần còn lại thành falserõ ràng). Nhiều lựa chọn thực sự khá khó chịu :)
Ja͢ck

6
@sunnyiitkgp onchangesự kiện không bao giờ được kích hoạt khi giá trị được thay đổi theo chương trình. Bạn có thể thêm .trigger('change')vào cuối để kích hoạt sự kiện ( mặc dù nó sẽ kích hoạt bất kể giá trị đã thực sự thay đổi )
Gabriele Petrioli


54

Các phần tử chọn HTML có một thuộc selectedIndextính có thể được ghi vào để chọn một tùy chọn cụ thể:

$('select').prop('selectedIndex', 3); // select 4th option

Sử dụng JavaScript đơn giản, điều này có thể đạt được bằng cách:

// use first select element
var el = document.getElementsByTagName('select')[0]; 
// assuming el is not null, select 4th option
el.selectedIndex = 3;

7
Đây phải là câu trả lời được chấp nhận ... Có vẻ như là giải pháp sạch nhất và sạch nhất ...
Denys Séguret

1
Vấn đề là nó không kích hoạt sự kiện 'onchange'.
Guy Korland

2
@GuyKorland Điều này xảy ra với bất kỳ câu trả lời nào khác, được trình bày ở đây ; nếu bạn muốn một sự kiện được kích hoạt, bạn phải thực hiện nó một cách thủ công.
Ja͢ck

1
@Jack Có cách nào ngắn không? Cách duy nhất tôi tìm thấy: var fireEvent = function (selectEuity) {if (selectEuity) {if ("fireEvent" trong selectEuity) {selectEuity.fireEvent ("onchange"); } other {var evt = document.createEvent ("HTMLEvents"); evt.initEvent ("thay đổi", sai, đúng); selectEuity.dispatchEvent (evt); }}}
Guy Korland

4
@GuyKorland jQuery cho thấy .trigger()điều đó, nhưng vì bạn đã làm điều này với mã, nên bạn cũng dễ dàng gọi cho trình xử lý thay đổi.
Ja͢ck

30

Tôi sẽ làm theo cách này

 $("#idElement").val('optionValue').trigger('change');

3
đây nên là câu trả lời được chọn
Uzumaki Naruto

2
$ ("# idEuity"). val ('tùy chọnValue'). change () cũng có thể hoạt động
Ullullu

23

nếu tùy chọn của bạn có giá trị, bạn có thể làm điều này:

$('select').val("the-value-of-the-option-you-want-to-select");

'select' sẽ là id của lựa chọn của bạn hoặc bộ chọn lớp. hoặc nếu chỉ có một lựa chọn, bạn có thể sử dụng thẻ như trong ví dụ.


2
Đó chính xác là những gì tôi cần. Cảm ơn.
chapman84

23

Cách dễ nhất là val(value)chức năng:

$('select').val(2);

Và để có được giá trị đã chọn, bạn không đưa ra đối số:

$('select').val();

Ngoài ra, nếu bạn có <option value="valueToSelect">...</option>, bạn có thể làm:

$('select').val("valueToSelect");

BẢN GIỚI THIỆU


Cũng đã làm việc $ ('# SelectCtrlId'). Val ('ValueToSelect');
Sai

9

Sử dụng mã sau nếu bạn muốn chọn một tùy chọn có giá trị cụ thể:

$('select>option[value="' + value + '"]').prop('selected', true);

$ ('chọn'). val (giá trị); Sao căng thẳng vậy? ;)
Zeeshan

1
@Zee Mã trả lời cũng cho phép nhiều lựa chọn.
Az Afghanistanvi

5
 Try with the below codes. All should work. 
    $('select').val(2);
    $('select').prop('selectedIndex', 1);
    $('select>option[value="5"]').prop('selected', true);
    $('select>option:eq(3)').attr('selected', 'selected');
    $("select option:contains(COMMERCIAL)").attr('selected', true);

3

Tôi thích nth-child () hơn eq () vì nó sử dụng lập chỉ mục dựa trên 1 thay vì dựa trên 0, điều này dễ hơn một chút trong não của tôi.

//selects the 2nd option
$('select>option:nth-child(2)').attr('selected', true);

"Chỉ số dựa trên 1" tốt hơn khi thao tác mọi thứ với ngày. Cứu tôi khỏi rất nhiều rắc rối. cảm ơn.
TCB13

3

Với phần tử '' thường chúng ta sử dụng thuộc tính 'value'. Nó sẽ làm cho nó dễ dàng hơn để thiết lập sau đó:

$('select').val('option-value');


2

trả lời bằng id:

$('#selectBoxId').find('option:eq(0)').attr('selected', true);

1
 $('select>option:eq(3)').attr('selected', 'selected');

Một lưu ý ở đây là nếu bạn có javascript xem sự kiện thay đổi của select / tùy chọn, bạn cần thêm .trigger('change')để mã trở thành.

 $('select>option:eq(3)').attr('selected', 'selected').trigger('change');

bởi vì chỉ gọi .attr('selected', 'selected')không kích hoạt sự kiện

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.