Cách tạo tùy chọn đầu tiên của <select> được chọn bằng jQuery


548

Làm cách nào để tạo tùy chọn đầu tiên được chọn với jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Câu trả lời:


956
$("#target").val($("#target option:first").val());

364
Cần lưu ý rằng việc này dễ dàng thực hiện hơn với $ ("# target") [0] .selectedIndex = 0;
David Andres

17
Nó hoạt động, nhưng nó dựa trên giá trị phần tử thứ 1 , nếu phần tử thứ 1 chứa giá trị trống, nó sẽ chọn phần tử gần nhất VỚI giá trị
evilReiko

2
Có vẻ hoạt động tốt, ngoại trừ IE6. Không chắc chắn ngày 7-8, hoạt động vào ngày 9.
Nicholi

3
Tôi đọc lại tuyên bố trước đây của mình, đã vượt lên chính mình. $ ("# mục tiêu"). val ("tùy chọn: đầu tiên"); hoạt động ở hầu hết mọi nơi trừ IE6 $ ("target"). val ($ ("# tùy chọn đích: đầu tiên"). val ()); sẽ hoạt động trong IE6, vì bạn thực sự đang tìm kiếm giá trị đầu tiên và nhập nó làm giá trị của mục tiêu. Hai tra cứu id thay vì một.
Nicholi

2
Và nó thực sự cần thiết cho IE6, 7 và 8. Trong khi .val ('tùy chọn: đầu tiên') hoạt động trong IE9 (và Safari và Firefox và Chrome và Opera).
Nicholi

178

Bạn có thể thử cái này

$("#target").prop("selectedIndex", 0);

2
Điều này không hoạt động đúng trong mọi trường hợp. Tôi có một bậc cha mẹ / con thả xuống. Chọn cha mẹ # 1, hiển thị con số 1, chọn cha mẹ # 2 hiển thị con # 2. Bất cứ khi nào họ chọn cha mẹ mới, nó sẽ đặt con tương ứng trở lại tùy chọn đầu tiên. Giải pháp này không làm điều này. Nó để thực đơn con "dính". Xem tùy chọn: chọn.prop ('được chọn', sai) / tùy chọn: first.prop ('đã chọn', 'đã chọn') cho câu hỏi này để biết câu trả lời hoạt động trong nhiều tình huống hơn.
Lance Cleveland

điều này không kích hoạt sự kiện onChange. Ít nhất là trong chrome.
Tomasz Mularchot

Cảm ơn bạn! Đây là câu trả lời đầu tiên trong danh sách các câu trả lời phù hợp với tôi.
Casey Crookston

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh làm cách nào tôi có thể đặt cơ sở được chọn dựa trên giá trị?
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
Cách tiếp cận thứ hai tốt. Vui lòng thêm giá trị của thuộc tính được chọn. Ví dụ: attr ("đã chọn", "đã chọn"). Không có tham số bổ sung này, lựa chọn sẽ không được thực hiện.
David Andres

@EgorPavlikhin - Tôi vừa chỉnh sửa câu trả lời để bao gồm mã JQuery để xóa cờ "đã chọn" khỏi bất kỳ tùy chọn nào có thể đã được chọn. Bây giờ câu trả lời đã đúng :)
jmort253

20
Không cần cho eachchức năng, nên là: $('#target option[selected="selected"]').removeAttr('selected')bây giờ cũng nên được sử dụng với removeProppropthay vào đó.
vsync

Một phiên bản kỹ lưỡng hơn của câu trả lời của James Lee Baker ở nơi khác về câu hỏi này, mặc dù thêm các chu trình tính toán có thể không cần thiết nếu giao diện được quản lý tốt.
Lance Cleveland

65

Khi bạn sử dụng

$("#target").val($("#target option:first").val());

điều này sẽ không hoạt động trong Chrome và Safari nếu giá trị tùy chọn đầu tiên là null.

tôi thích

$("#target option:first").attr('selected','selected');

bởi vì nó có thể hoạt động trong tất cả các trình duyệt.


3
Bạn cũng cần "bỏ chọn" bất kỳ yếu tố nào được chọn trước để nó hoạt động trong nhiều trường hợp hơn. Xem câu trả lời từ James Lee Baker để biết chi tiết.
Lance Cleveland

44

Thay đổi giá trị của đầu vào được chọn hoặc điều chỉnh thuộc tính được chọn có thể ghi đè lên thuộc tính được chọn mặc định của phần tử DOM, dẫn đến một phần tử có thể không được đặt lại đúng trong một biểu mẫu có sự kiện đặt lại được gọi.

Sử dụng phương thức prop của jQuery để xóa và đặt tùy chọn cần thiết:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Hoàn hảo. Tôi có tầng thả xuống menu. Khi người dùng chọn tùy chọn cha mẹ 2 thì tùy chọn con 3 Tôi không muốn điều đó "dính". Nói cách khác, người dùng sau đó chọn cha mẹ # 1, sau đó chọn lại cha mẹ # 2. Khi điều đó xảy ra, tôi muốn menu con thiết lập lại tùy chọn đầu tiên (đó là "Bất kỳ" trong trường hợp của tôi). Tất cả các giải pháp khác ở đây đều thất bại trên Firefox v19 và Chrome trên Linux.
Lance Cleveland

33
$("#target")[0].selectedIndex = 0;

1
Điều này sẽ không hoạt động trong trường hợp thả xuống có một mục được chọn trước. Xem ý kiến ​​của tôi về câu trả lời được lựa chọn để biết chi tiết.
Lance Cleveland

21

Một điểm tinh tế mà tôi nghĩ rằng tôi đã khám phá về các câu trả lời được bình chọn hàng đầu là mặc dù chúng thay đổi chính xác giá trị đã chọn, nhưng chúng không cập nhật phần tử mà người dùng nhìn thấy (chỉ khi nhấp vào tiện ích, họ mới thấy kiểm tra bên cạnh yếu tố cập nhật).

Xâu chuỗi cuộc gọi .change () đến cuối cũng sẽ cập nhật tiện ích UI.

$("#target").val($("#target option:first").val()).change();

(Lưu ý rằng tôi nhận thấy điều này trong khi sử dụng jQuery Mobile và một hộp trên máy tính để bàn Chrome, vì vậy điều này có thể không xảy ra ở mọi nơi).


Xâu chuỗi cuộc gọi .change () đến cuối cũng sẽ cập nhật tiện ích UI.
codemirror

17

Nếu bạn có các tùy chọn bị vô hiệu hóa, bạn có thể thêm không ([bị tắt]) để ngăn việc chọn chúng dẫn đến kết quả sau:

$("#target option:not([disabled]):first").attr('selected','selected')

1
Điểm tốt về các tùy chọn bị vô hiệu hóa. Đẹp bổ sung cho các câu trả lời được trình bày!
Lance Cleveland

16

Một cách khác để đặt lại các giá trị (cho nhiều yếu tố được chọn) có thể là:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1 thực sự là một câu trả lời hay, nhưng bạn có thể đã làm cho nó cụ thể hơn cho miền câu hỏi; thay vì $("selector")bạn có thể vừa viết$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

Điều này chỉ hoạt động nếu không có tùy chọn đã được chọn. Xem câu trả lời của James Lee Baker.
Webars

6

Tôi thấy rằng chỉ cài đặt attr được chọn sẽ không hoạt động nếu đã có thuộc tính được chọn. Mã tôi sử dụng bây giờ trước tiên sẽ bỏ đặt thuộc tính đã chọn, sau đó chọn tùy chọn đầu tiên.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

Điều này hoạt động tốt và rất giống với câu trả lời của James Lee Baker đã lưu ý ở nơi khác về câu hỏi này. Tôi thích câu trả lời khác với tùy chọn: được chọn và tùy chọn: đầu tiên là việc thực hiện tùy chọn: đầu tiên có khả năng nhanh hơn (tính toán khôn ngoan) hơn find ().
Lance Cleveland

5

Mặc dù mỗi chức năng có thể không cần thiết ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

làm việc cho tôi


5

Đây là cách tôi sẽ làm điều đó:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Điều này hoạt động tốt và rất giống với câu trả lời của James Lee Baker đã lưu ý ở nơi khác về câu hỏi này. Tôi thích câu trả lời khác với tùy chọn: được chọn và tùy chọn: đầu tiên là việc thực hiện tùy chọn: đầu tiên có khả năng nhanh hơn (tính toán khôn ngoan) hơn find ().
Lance Cleveland

2

Nó chỉ hoạt động với tôi bằng cách sử dụng một kích hoạt ('thay đổi') ở cuối, như thế này:

$("#target option:first").attr('selected','selected').trigger('change');

2

Nếu bạn định sử dụng tùy chọn đầu tiên làm mặc định như

<select>
    <option value="">Please select an option below</option>
    ...

sau đó bạn chỉ có thể sử dụng:

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

Nó là tốt đẹp và đơn giản.



1

Ở mặt sau câu trả lời của James Lee Baker, tôi thích giải pháp này vì nó loại bỏ sự phụ thuộc vào hỗ trợ trình duyệt cho: trước tiên: đã chọn ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

Đối với tôi nó chỉ hoạt động khi tôi thêm đoạn mã sau:

.change();

Đối với tôi nó chỉ hoạt động khi tôi thêm mã sau: Vì tôi muốn "đặt lại" biểu mẫu, nghĩa là chọn tất cả các tùy chọn đầu tiên trong tất cả các lựa chọn của biểu mẫu, tôi đã sử dụng mã sau:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

Sử dụng:

$("#selectbox option:first").val()

Vui lòng tìm cách làm việc đơn giản trong JSFiddle này .


Làm thế nào về vị trí 15, 25, hoặc với văn bản cụ thể? : D
Marcelo Agimóvel

Gọi .val()chỉ nhận được giá trị của tùy chọn đầu tiên trong danh sách. Nó không thực sự chọn (thực hiện lựa chọn) tùy chọn đầu tiên, như đã được hỏi trong câu hỏi ban đầu.
Funka

1

Đối với tôi, nó chỉ hoạt động khi tôi thêm dòng mã sau

$('#target').val($('#target').find("option:first").val());


0

Nếu bạn đang lưu trữ đối tượng jQuery của phần tử chọn:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

Kiểm tra cách tiếp cận tốt nhất này bằng jQuery với ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});

0

Bạn có thể chọn bất kỳ tùy chọn từ dropdownbằng cách sử dụng nó.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Thay thế id bằng id và chỉ mục thẻ chọn cụ thể cụ thể bằng phần tử cụ thể bạn muốn chọn.

I E

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Vì vậy, ở đây để lựa chọn phần tử đầu tiên tôi sẽ sử dụng đoạn mã sau:

$('select#ddlState').val($('#ddlState option')[0].value)

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.