Làm thế nào để bạn chọn một tùy chọn cụ thể trong một phần tử CHỌN trong jQuery?


718

Nếu bạn biết Chỉ mục, Giá trị hoặc Văn bản. ngoài ra nếu bạn không có ID để tham khảo trực tiếp.

Đây , đâyđây là tất cả các câu trả lời hữu ích.

Ví dụ đánh dấu

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

46
$("#my_select").val("the_new_value").change();... ... từ đó
dsdsdsdsd

Câu trả lời:


1206

Một bộ chọn để lấy phần tử tùy chọn ở giữa theo giá trị là

$('.selDiv option[value="SEL1"]')

Đối với một chỉ mục:

$('.selDiv option:eq(1)')

Đối với một văn bản được biết đến:

$('.selDiv option:contains("Selection 1")')

EDIT : Như đã nhận xét ở trên OP có thể đã có sau khi thay đổi mục được chọn của danh sách thả xuống. Trong phiên bản 1.6 trở lên, phương thức prop () được khuyến nghị:

$('.selDiv option:eq(1)').prop('selected', true)

Trong các phiên bản cũ hơn:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : sau bình luận của Ryan. Một trận đấu trên "Lựa chọn 10" có thể không mong muốn. Tôi không tìm thấy bộ chọn nào phù hợp với toàn văn, nhưng bộ lọc hoạt động:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : Hãy thận trọng $(e).text()vì nó có thể chứa một dòng mới khiến việc so sánh thất bại. Điều này xảy ra khi các tùy chọn được đóng hoàn toàn (không có </option>thẻ):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

Nếu bạn chỉ cần sử dụng e.textbất kỳ khoảng trắng bổ sung nào như dòng mới theo dõi sẽ bị xóa, làm cho sự so sánh trở nên mạnh mẽ hơn.


8
: chứa không tuyệt vời vì nó sẽ khớp với các đoạn văn bản; có vấn đề nếu bất kỳ văn bản tùy chọn nào của bạn là một chuỗi con của văn bản tùy chọn khác.
Ryan

26
Đây là công việc quá $ ('# id tùy chọn [value = "0"]'). Attr ('đã chọn', 'đã chọn');
DevC

@Grastveit làm thế nào để thay đổi màu của tùy chọn đầu tiên nếu nó được chọn hay không khi nó có một lớp nói myClass. Cảm ơn
Zaker

@ Người dùng tôi không hiểu. Có lẽ gửi nó trong một câu hỏi mới? Hoặc là $ ('. SelDiv .myClass'). Css ('color', 'red')?
Grastveit

6
Tôi muốn thêm bạn nên DEFINITELY sử dụng prop và không attr. Tôi gần như đã cố gắng gỡ lỗi một ứng dụng và thay đổi từ attr sang prop đã sửa nó.
dùng609926

125

Không có phương pháp nào ở trên cung cấp giải pháp tôi cần vì vậy tôi nghĩ rằng tôi sẽ cung cấp những gì hiệu quả cho tôi.

$('#element option[value="no"]').attr("selected", "selected");

10
Lưu ý đối với jQuery 1.6, điều này nên sử dụng propvà không attr.
Mã hóa

@GoneCoding Sử dụng .attrlà chính xác. "được chọn" là một thuộc tính của <tùy chọn> w3.org/TR/html5/forms.html#attr-option-selected
Carlos Llongo

3
@CarlosLlongo: Điều đó không liên quan. Đề xuất jQuery là luôn luôn sử dụng proptheo sở thích attr. Điều đó giúp tiết kiệm việc phải tra cứu từng thuộc tính trên w3.org để xem liệu đó chỉ là một thuộc tính hay được thực hiện với các hành động sao lưu.
Mã hóa

82

Bạn chỉ có thể sử dụng val()phương pháp:

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

20
Điều này là sai vì bạn đang THIẾT LẬP giá trị của TẤT CẢ các phần tử CHỌN the_value. .val không phải là chức năng chọn / lọc! Nó là một trình truy cập thuộc tính và truyền vào chuỗi đó cài đặt giá trị. Tôi đã cố gắng lấy lại upvote của mình nhưng đã quá muộn sau khi tôi thực hiện lại điều này trong thử nghiệm.
AaronLS

4
Hot bạn đã nhận được 10 phiếu là câu trả lời hữu ích? Val () là một getter và setter. Nếu bạn chỉ sử dụng val (), bạn sẽ nhận được giá trị. Nếu bạn vượt qua thứ gì đó như val ('the_value'), bạn sẽ đặt nó thành 'the_value'
Gui

12
Vui lòng @AaronLS và @guilhermeGeek, tham khảo tài liệu (ví dụ cuối cùng). Nó hoạt động như một công cụ chọn để chọn, các hộp kiểm và các nút radio và như một trình thiết lập giá trị cho các kiểu nhập văn bản và văn bản.
Leandro Ardissone

9
Bạn đã đọc sai tài liệu. Đối với các hộp kiểm, radio và hộp danh sách, lệnh sẽ đặt thuộc tính "được chọn" cho các mục đó. Ví dụ cuối cùng cho thấy cách vượt qua val ("hộp kiểm 1") khiến nó được chọn. Điều này không giống như một "bộ chọn" về mặt nhận các đối tượng thông qua bộ chọn CSS / jquery. Tôi đã kiểm tra mã của bạn, nó không hoạt động dòng dưới cùng.
AaronLS

27
+1: không, đó không phải là công cụ chọn JQuery, tuy nhiên tôi nghĩ rằng hầu hết mọi người tìm kiếm câu hỏi này đều giống tôi và chỉ muốn thay đổi tùy chọn hiện được chọn; đến với một bộ chọn thực tế chỉ là một cách để làm điều đó. Và điều này chắc chắn tốt hơn những câu trả lời mà tôi đã thấy có bạn lặp đi lặp lại qua tất cả các tùy chọn.
kdgregory

57

Theo giá trị, những gì làm việc với tôi với jQuery 1.7 là đoạn mã dưới đây, hãy thử điều này:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();

5
Tôi không chắc bạn cần phương thức .change ().
Phillip Senn

6
Điều .change()cần thiết. Tôi đã có một ví dụ về việc tôi đã chuyển đổi hình thu nhỏ dựa trên CHỌN. Khi tôi tải lên một chủ đề tùy chỉnh, nó được cho là chọn "Chủ đề tùy chỉnh" từ danh sách các tùy chọn. Cuộc .prop()gọi đã hoạt động, nhưng không có .change(), hình ảnh thu nhỏ bên phải lựa chọn của tôi không bao giờ được cập nhật.
Volomike

2
.change () là lời khuyên tốt nhất. +1
Ja8zyjits

1
Lưu ý: một propgiá trị boolean tạo ra cùng một đầu ra. ví dụ.prop('selected', true)
Cuốn Mã hóa

Tùy thuộc, một số trình duyệt - có thể là các trình duyệt cũ - cần chuỗi 'được chọn'. Tôi nghĩ rằng phần lớn trong số họ hỗ trợ chuỗi văn bản.
mpoletto

16

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 $selectlà 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 selectcác thẻ bằng cách đặt thuộc selectedtính khớp optionvớ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 booleantham 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 filterhà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.


13

Bạn có thể đặt tên cho lựa chọn và sử dụng này:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

Nó nên chọn tùy chọn bạn muốn.


12
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");

Cảm ơn bạn đã đăng bài của bạn, nhưng câu trả lời này thêm gì vào cuộc trò chuyện không có trong các câu trả lời được chấp nhận?
Edward

nếu có một tùy chọn đã được chọn thì điều này sẽ thất bại vì thả xuống không thể có nhiều mục được chọn trừ khi đó là một lựa chọn đa lựa chọn. Bạn cần làm .prop ('được chọn', đúng)
derekcohen

9

Trả lời câu hỏi của riêng tôi cho tài liệu. Tôi chắc chắn có nhiều cách khác để thực hiện điều này, nhưng điều này hoạt động và mã này đã được thử nghiệm.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>

9

Chính xác nó sẽ hoạt động thử phương pháp dưới đây

Đối với tùy chọn chọn bình thường

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>

Để chọn 2 tùy chọn kích hoạt tùy chọn cần sử dụng

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>

8

Sử dụng jquery-2.1.4 , tôi đã tìm thấy câu trả lời sau đây phù hợp với mình:

$('#MySelectionBox').val(123).change();

Nếu bạn có một giá trị chuỗi, hãy thử như sau:

$('#MySelectionBox').val("extra thing").change();

Các ví dụ khác không phù hợp với tôi vì vậy đó là lý do tại sao tôi thêm câu trả lời này.

Tôi đã tìm thấy câu trả lời ban đầu tại: https://forum.jquery.com/topic/how-to-dynamical-select-option-in-dropdown-menu


8

Để cài đặt giá trị chọn với kích hoạt đã chọn:

$('select.opts').val('SEL1').change();

Để cài đặt tùy chọn từ một phạm vi:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Mã này sử dụng bộ chọn để tìm ra đối tượng chọn có điều kiện, sau đó thay đổi thuộc tính được chọn theo attr().


Hơn nữa, tôi khuyên bạn nên thêm change()sự kiện sau khi cài đặt thuộc tính selected, bằng cách này, mã sẽ gần với việc thay đổi lựa chọn của người dùng.


6

Tôi sử dụng điều này, khi tôi biết chỉ số của danh sách.

$("#yourlist :nth(1)").prop("selected","selected").change();

Điều này cho phép danh sách thay đổi và kích hoạt sự kiện thay đổi. ": Nth (n)" đang đếm từ chỉ số 0


5

tôi sẽ đi với: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });

5

Thử cái này

bạn chỉ cần sử dụng id trường chọn thay vì #id (tức là # select_name)

thay vì giá trị tùy chọn sử dụng chọn tùy chọn của bạn giá trị

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>

3

Đối với Jquery được chọn nếu bạn gửi thuộc tính cho hàm và cần tùy chọn cập nhật-chọn

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');

3
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>

1

$('select').val('the_value');vẻ là giải pháp phù hợp và nếu bạn có các hàng trong bảng dữ liệu thì:

$row.find('#component').val('All');

1

nếu bạn không muốn sử dụng jQuery, bạn có thể sử dụng đoạn mã dưới đây:

document.getElementById("mySelect").selectedIndex = "2";

1

Cảm ơn câu hỏi. Hy vọng đoạn mã này sẽ làm việc cho bạn.

var val = $("select.opts:visible option:selected ").val();

0
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

hoặc là

$('#select option[value="myValue"]').prop("selected",true).trigger("change");

Vui lòng chỉnh sửa câu trả lời của bạn để mã được định dạng dưới dạng mã. Thực hiện việc này bằng cách sử dụng thanh công cụ hoặc chỉ cần thụt lề tất cả các dòng của mỗi khối mã bằng bốn khoảng trắng.
beruic
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.