Làm thế nào để kiểm tra nếu một tùy chọn được chọn?


146
$('#mySelectBox option').each(function() {
    if ($(this).isChecked())
       alert('this option is selected');
     else
       alert('this is not');
});

Rõ ràng, isCheckedkhông hoạt động. Vì vậy, câu hỏi của tôi là cách thích hợp để làm điều này là gì? Cảm ơn.


2
00zebra00, cảm ơn vì đã tìm thấy câu trả lời trong số nhiều lựa chọn bên dưới. Tuy nhiên, vui lòng đảm bảo thông báo về cuộc trò chuyện trong các nhận xét bên dưới về 'cách tốt nhất' để truy cập vào tài sản đã chọn. Điểm chung là khi bạn có thể truy cập một phần tử trực tiếp trong javascript (bằng cách sử dụng this.selected) mà bạn nên bỏ qua bằng jQuery ( $(this).prop("selected")) nhưng cả hai sẽ hoạt động cho bạn.
veeTrain

Câu trả lời:


263

CẬP NHẬT

Một phương thức jQuery trực tiếp hơn cho tùy chọn đã chọn sẽ là:

var selected_option = $('#mySelectBox option:selected');

Trả lời câu hỏi .is(':selected')là những gì bạn đang tìm kiếm:

$('#mySelectBox option').each(function() {
    if($(this).is(':selected')) ...

Cách không phải jQuery (được cho là thực hành tốt nhất) sẽ là:

$('#mySelectBox option').each(function() {
    if(this.selected) ...

Mặc dù, nếu bạn chỉ tìm kiếm giá trị đã chọn, hãy thử:

$('#mySelectBox').val()

Nếu bạn đang tìm kiếm văn bản của giá trị được chọn, hãy làm:

$('#mySelectBox option').filter(':selected').text();

Hãy xem: http://api.jquery.com/selected-selector/

Lần tới hãy tìm những câu hỏi SO trùng lặp:

Nhận tùy chọn đã chọn hiện tại hoặc Đặt tùy chọn đã chọn hoặc Cách nhận tùy chọn được chọn $ (này) trong jQuery? hoặc tùy chọn [được chọn = true] không hoạt động


Nó sử dụng jQuery không có lý do chính đáng. sử dụng các thuộc tính DOM js riêng. hãy xem cái này
gdoron đang hỗ trợ Monica

3
Có vẻ như bạn đã không đọc câu trả lời của tôi. this.selectedcó thể được sử dụng thay vì $(this).is(":selected")tôi đoán không cần jsperf cho việc này, phải không? Tôi không có gì chống lại việc sử dụng jQuery!, Nhưng sử dụng nó khi bạn cần, không phải khi nó không cung cấp gì ngoài chi phí và nhiều mã hơn.
gdoron đang hỗ trợ Monica

@gdoron this.selectedhoàn toàn hợp lệ nhưng anh ấy đã yêu cầu cách jQuery thích hợp để làm điều đó.
iambriansreed

2
@gdoron Tôi hoàn toàn đồng ý với bạn. Có lẽ những người trong chúng tôi đã đưa lên jQuery cần tham gia một lớp JavaScript khắc phục. :)
iambriansreed

2
@gmoron Không, câu hỏi của tôi đã được bình chọn và bỏ phiếu. Công việc thám tử tốt mặc dù.
iambriansreed

26

Bạn có thể nhận tùy chọn đã chọn theo cách này:

$('#mySelectBox option:selected')...

BẢN THỬ TRỰC TIẾP

Nhưng nếu bạn muốn lặp lại tất cả các tùy chọn, hãy thực hiện this.selectedthay vì this.isCheckedkhông tồn tại:

$('#mySelectBox option').each(function() {
    if (this.selected)
       alert('this option is selected');
     else
       alert('this is not');
});

BẢN THỬ TRỰC TIẾP

Cập nhật:

Bạn có rất nhiều câu trả lời gợi ý bạn sử dụng điều này:

$(this).is(':selected')tốt, nó có thể được thực hiện nhanh hơn và dễ dàng hơn rất nhiều, this.selectedvậy tại sao bạn nên sử dụng nó mà không phải là phương thức phần tử DOM gốc?!

Đọc Biết Thuộc tính và Hàm DOM của bạn trong jQuery thông tin thẻ


1
@downvoter, quan tâm để bình luận? ra khỏi bóng râm và chiến đấu :)
gdoron đang hỗ trợ Monica

Có thể bởi vì bạn đã không trả lời câu hỏi nhưng đã thực hành tốt nhất. ;)
iambriansreed

1
@iambriansreed. Hà?! Tôi đã không trả lời câu hỏi? phần nào trong câu hỏi vẫn chưa được trả lời?
gdoron đang hỗ trợ Monica

2
Các cuộc thảo luận thú vị ở đây. :) Không chắc tại sao tất cả các DV, nhưng tôi UV mọi người đã sử dụng this.selected. Tôi đồng ý với ý kiến ​​của bạn về việc lạm dụng / lạm dụng jQuery. Một phần của việc biết jQuery, là biết khi nào không sử dụng nó. Điều đó nói rằng, hãy nhớ rằng ':selected'bộ chọn là một bộ chọn Sizzle tùy chỉnh, vì vậy việc sử dụng nó sẽ vô hiệu hóa việc sử dụng querySelectorAlltrong các trình duyệt được hỗ trợ. Nó chắc chắn không phải là kết thúc của thế giới, vì nó cung cấp một số mã ngắn, đẹp, nhưng cá nhân tôi có xu hướng tránh những thứ chỉ có Sizzle.

@gdoron Khi bạn chỉ câu hỏi này trong Meta, tôi đã quan tâm. Về DV, nút này có thể hữu ích cho bạn.
VisioN

4

Nếu bạn không quen thuộc hoặc thoải mái is(), bạn có thể kiểm tra giá trị của prop("selected").

Như đã thấy ở đây :

$('#mySelectBox option').each(function() {
    if ($(this).prop("selected") == true) {
       // do something
    } else {
       // do something
    }
});​

Chỉnh sửa :

Như @gdoron đã chỉ ra trong các bình luận, cách nhanh nhất và phù hợp nhất để truy cập vào thuộc tính được chọn của một tùy chọn là thông qua bộ chọn DOM. Dưới đây là cập nhật fiddle hiển thị hành động này.

if (this.selected == true) {

xuất hiện để làm việc là tốt! Cảm ơn gdoron.


Bạn có thể vui lòng giải thích cho tôi tại sao anh ta nên sử dụng $(this).prop("selected")thay vì this.selected?! nó mang lại cho bạn những gì ??! ps Tôi không phải là người
hạ bệ

@gdoron, lợi thế chính mà tôi nghĩ đến là sự quen thuộc. Tôi không chắc chắn những gì isđược sử dụng tốt nhất cho nhưng tôi thích truy cập vào tài sản của tôi bằng prop và attr. Trong hầu hết các kịch bản, nó có thể chỉ là một vấn đề của hương vị. Vâng, có một sự tò mò của bỏ phiếu xuống!
veeTrain

2
Tôi đề nghị đọc phần Biết về Thuộc tính và Chức năng DOM của jQuery thông tin thẻ . không có lý do để sử dụng mã chậm hơn + nhiều mã hơn để làm điều đơn giản. .is()nên được sử dụng cho bộ chọn phức tạp như $(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like $ (...). is (": visible").
gdoron đang hỗ trợ Monica

@gdoron; cảm ơn rất nhiều vì đã chỉ ra điều đó Tôi đã cập nhật câu trả lời của tôi cho phù hợp.
veeTrain

Không thành vẫn đề. Bạn có thể nêu lên câu trả lời của tôi nếu bạn nghĩ nó tốt hơn những người khác. (Tôi không muốn câu trả lời $(this).is(':selected')được chấp nhận. Nên sử dụng Stackoverflow để tìm hiểu các thực tiễn tốt nhất, không phải là các lỗi phổ biến ...)
gdoron đang hỗ trợ Monica

3

Bạn có thể sử dụng cách này bằng jquery:

$(document).ready(function(){
 $('#panel_master_user_job').change(function () {
 var job =  $('#panel_master_user_job').val();
 alert(job);
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="job" id="panel_master_user_job" class="form-control">
                                    <option value="master">Master</option>
                                    <option value="user">User</option>
                                    <option value="admin">Admin</option>
                                    <option value="custom">Custom</option>
                                </select>


2

sử dụng

 $("#mySelectBox option:selected");

để kiểm tra nếu đó là một tùy chọn cụ thể myoption:

 if($("#mySelectBox option:selected").text() == myoption){
          //...
 }

Không downvote bạn (có một downvote nối tiếp ở đây!) Nhưng là gì myoption???
gdoron đang hỗ trợ Monica

1
chỉ là một chuỗi được cho là một tùy chọn ví dụ mà OP muốn kiểm tra nếu được chọn
Mouna Cheikhna

Liên quan đến downvote, bạn có thể muốn đọc các bình luận dưới câu trả lời của tôi .
gdoron đang hỗ trợ Monica

2

Hãy xem đây là danh sách lựa chọn của bạn:

<select onchange="var optionVal = $(this).find(':selected').val(); doSomething(optionVal)">

                                <option value="mostSeen">Most Seen</option>
                                <option value="newst">Newest</option>
                                <option value="mostSell">Most Sell</option>
                                <option value="mostCheap">Most Cheap</option>
                                <option value="mostExpensive">Most Expensive</option>

                            </select>

sau đó bạn kiểm tra tùy chọn đã chọn như thế này:

function doSomething(param) {

    if ($(param.selected)) {
        alert(param + ' is selected!');
    }

}

0

Trong trường hợp của tôi, tôi không biết tại sao lựa chọn luôn luôn đúng. Vì vậy, cách duy nhất tôi có thể nghĩ ra là:

var optionSelected = false;
$( '#select_element option' ).each( function( i, el ) {
    var optionHTMLStr = el.outerHTML;

    if ( optionHTMLStr.indexOf( 'selected' ) > 0 ) {
        optionSelected = true;
        return false;
    }
});

0

Nếu bạn chỉ muốn kiểm tra nếu một tùy chọn được chọn, thì bạn không cần phải lặp qua tất cả các tùy chọn. Cứ làm đi

if($('#mySelectBox').val()){
    // do something
} else {
    // do something else
}

Lưu ý: Nếu bạn có một tùy chọn có giá trị = 0 mà bạn muốn có thể chọn, bạn cần thay đổi điều kiện if thành $('#mySelectBox').val() != null


0

Nếu bạn cần kiểm tra tùy chọn trạng thái được chọn cho giá trị cụ thể :

$('#selectorId option[value=YOUR_VALUE]:selected')

0

Nếu bạn muốn kiểm tra tùy chọn đã chọn thông qua javascript

Phương pháp đơn giản nhất là thêm thuộc tính onchange trong thẻ đó và xác định hàm trong tệp js xem ví dụ nếu tệp html của bạn có các tùy chọn giống như thế này

 <select onchange="subjects(this.value)">
               <option>Select subject</option>
               <option value="Computer science">Computer science</option>
               <option value="Information Technolgy">Information Technolgy</option>
               <option value="Electronic Engineering">Electronic Engineering</option>
               <option value="Electrical Engineering">Electrical Engineering</option>
 </select>

Và bây giờ thêm chức năng trong tập tin js

function subjects(str){
    console.log(`selected option is ${str}`);
}

Nếu bạn muốn kiểm tra tùy chọn đã chọn trong tệp php

Chỉ cần cung cấp thuộc tính name trong thẻ của bạn và truy cập vào tệp php biến / mảng toàn cầu ($ _GET hoặc $ _POST) xem ví dụ nếu tệp html của bạn giống như thế này

<form action="validation.php" method="POST">
             Subject:<br>
            <select name="subject">
               <option>Select subject</option>
               <option value="Computer science">Computer science</option>
               <option value="Information Technolgy">Information Technolgy</option>
               <option value="Electronic Engineering">Electronic Engineering</option>
               <option value="Electrical Engineering">Electrical Engineering</option>
            </select><br>

         </form>

Và trong tệp php.php của bạn, bạn có thể truy cập như thế này

$subject = $_POST['subject'];
echo "selected option is $subject";
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.