วิธีการตรวจสอบว่ามีการเลือกตัวเลือกหรือไม่


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

เห็นได้ชัดว่าisCheckedไม่ทำงาน ดังนั้นคำถามของฉันคือวิธีที่เหมาะสมในการทำเช่นนี้คืออะไร? ขอบคุณ


2
00zebra00 ขอขอบคุณที่ค้นหาคำตอบจากตัวเลือกมากมายด้านล่าง อย่างไรก็ตามโปรดแจ้งให้ทราบถึงการสนทนาในความคิดเห็นด้านล่างเกี่ยวกับวิธีที่ 'ดีที่สุด' สำหรับการเข้าถึงคุณสมบัติที่เลือก สาระสำคัญทั่วไปคือเมื่อคุณสามารถเข้าถึงองค์ประกอบโดยตรงใน javascript (ใช้this.selected) ที่คุณควรหลีกเลี่ยงการใช้ jQuery ( $(this).prop("selected")) แต่พวกเขาทั้งสองจะทำงานให้คุณ
veeTrain

คำตอบ:


263

UPDATE

วิธี jQuery โดยตรงมากขึ้นไปยังตัวเลือกที่เลือกจะเป็น:

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

ตอบคำถาม.is(':selected')คือสิ่งที่คุณกำลังมองหา:

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

ไม่ใช่วิธี jQuery (วิธีปฏิบัติที่ดีที่สุด) ที่จะทำ:

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

แม้ว่าหากคุณเพียงแค่มองหาค่าที่เลือกลอง:

$('#mySelectBox').val()

หากคุณกำลังมองหาข้อความของค่าที่เลือกให้ทำ:

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

ชำระเงิน: http://api.jquery.com/selected-selector/

ครั้งต่อไปให้ค้นหาคำถาม SO ที่ซ้ำกัน:

รับตัวเลือกที่เลือกในปัจจุบัน หรือ ตั้งค่าตัวเลือกที่เลือก หรือ วิธีการรับตัวเลือก$ (นี้) ใน jQuery? หรือ ตัวเลือก [select = true] ไม่ทำงาน


มันใช้ jQuery โดยไม่มีเหตุผลดี ใช้คุณสมบัติ DOM js ดั้งเดิม ลองดูสิ่งนี้
gdoron ให้การสนับสนุน Monica

3
ดูเหมือนว่าคุณไม่ได้อ่านคำตอบของฉัน this.selectedสามารถใช้แทน$(this).is(":selected")ฉันคิดว่าไม่จำเป็นต้องใช้ jsperf สำหรับสิ่งนี้ใช่ไหม? ฉันไม่มีอะไรเทียบกับการใช้ jQuery! แต่ใช้เมื่อคุณต้องการไม่ใช่เมื่อให้อะไรนอกจากค่าใช้จ่ายและรหัสเพิ่มเติม
gdoron ให้การสนับสนุนโมนิก้า

@ gdoron this.selectedถูกต้องสมบูรณ์ แต่เขาขอวิธี jQuery ที่เหมาะสมในการทำ
iambriansreed

2
@ gdoron ฉันเห็นด้วยกับคุณโดยสิ้นเชิง บางทีพวกเราที่อยู่ใน jQuery จำเป็นต้องเรียน JavaScript เพื่อแก้ไข :)
iambriansreed

2
@ gmoron ไม่คำถามของฉันถูกลงคะแนนและโหวตแล้ว งานนักสืบที่ดีแม้ว่า
iambriansreed

26

คุณสามารถรับตัวเลือกที่เลือกด้วยวิธีนี้:

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

สาธิตสด

แต่ถ้าคุณต้องการที่จะย้ำตัวเลือกทั้งหมดให้ทำด้วยthis.selectedแทนที่จะthis.isCheckedไม่มี:

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

สาธิตสด

ปรับปรุง:

คุณมีคำตอบมากมายที่แนะนำให้คุณใช้สิ่งนี้:

$(this).is(':selected')มันสามารถทำได้เร็วกว่าและง่ายกว่ามากด้วยthis.selectedเหตุใดคุณจึงควรใช้และไม่ใช้วิธีองค์ประกอบ DOM ดั้งเดิม

อ่านรู้คุณสมบัติและฟังก์ชั่น DOM ของคุณในjQuery ข้อมูลแท็ก


1
@downvoter สนใจที่จะแสดงความคิดเห็น? ออกไปจากเงาและต่อสู้! :)
gdoron ให้การสนับสนุน Monica

อาจเป็นเพราะคุณไม่ได้ตอบคำถาม แต่ให้แนวปฏิบัติที่ดีที่สุด ;)
iambriansreed

1
@iambriansreed ฮา ?! ฉันไม่ได้ตอบคำถาม? ส่วนใดของคำถามที่ยังไม่ได้รับคำตอบ
gdoron ให้การสนับสนุนโมนิก้า

2
การสนทนาที่น่าสนใจที่นี่ :) ไม่แน่ใจว่าทำไม DVS ทั้งหมด แต่ผม UV'd this.selectedทุกคนที่ใช้ ฉันเห็นด้วยกับความคิดเห็นของคุณเกี่ยวกับการใช้มากเกินไป / ละเมิด jQuery ส่วนหนึ่งของการรู้จัก jQuery คือการรู้ว่าจะไม่ใช้เมื่อใด ที่กล่าวไว้โปรดทราบว่า':selected'ตัวเลือกเป็นตัวเลือก Sizzle ที่กำหนดเองดังนั้นการใช้มันจะเป็นการปิดการใช้งานquerySelectorAllเบราว์เซอร์ที่รองรับ แน่นอนว่ามันไม่ใช่จุดจบของโลกเพราะมันให้รหัสสั้น ๆ ที่ดี แต่โดยส่วนตัวฉันมักจะหลีกเลี่ยงสิ่งที่ฉ่า ๆ เท่านั้น

@ gdoron เมื่อคุณถามคำถามนี้ใน Meta ฉันได้รับความสนใจ เกี่ยวกับ DV โหนดนี้อาจมีประโยชน์สำหรับคุณ
VisioN

4

ถ้าคุณไม่คุ้นเคยหรือความสะดวกสบายกับคุณก็สามารถตรวจสอบค่าของis()prop("selected")

เท่าที่เห็นที่นี่ :

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

แก้ไข :

ตามที่ @ gdoron ชี้ให้เห็นในความคิดเห็นวิธีที่เร็วและเหมาะสมที่สุดในการเข้าถึงคุณสมบัติที่เลือกของตัวเลือกคือผ่านตัวเลือก DOM นี่คือการปรับปรุงซอแสดงการกระทำนี้

if (this.selected == true) {

ดูเหมือนจะใช้งานได้เช่นกัน! ขอบคุณ gdoron


คุณช่วยอธิบายฉันหน่อยได้ไหมว่าทำไมเขาถึงควรใช้$(this).prop("selected")แทนthis.selected! มันให้อะไรคุณ ?? PS ฉันไม่ downvoter และ ...
gdoron สนับสนุน Monica

@ gdoron ข้อได้เปรียบหลักที่ฉันคิดว่าเป็นความคุ้นเคย ฉันไม่แน่ใจว่าสิ่งที่isดีที่สุดสำหรับการใช้ แต่ฉันชอบการเข้าถึงคุณสมบัติของฉันโดย prop และ attr ในสถานการณ์ส่วนใหญ่อาจเป็นเรื่องของรสนิยม ใช่มีผื่นลงอยากรู้อยากเห็น!
veeTrain

2
ฉันขอแนะนำให้อ่านรู้ DOM คุณสมบัติและฟังก์ชั่นของคุณเป็นส่วนหนึ่งของข้อมูลแท็กjQuery ไม่มีเหตุผลที่จะใช้รหัสที่ช้าลง + รหัสเพิ่มเติมเพื่อทำสิ่งที่ง่าย .is()ควรใช้สำหรับตัวเลือกที่ซับซ้อนเช่น$(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like $ (... ). คือ (": มองเห็นได้")
gdoron ให้การสนับสนุนโมนิก้า

@gdoron; ขอบคุณมากสำหรับการชี้ให้เห็น ฉันได้ปรับปรุงคำตอบของฉันแล้ว
veeTrain

ไม่มีปัญหา คุณสามารถโหวตคำตอบของฉันถ้าคุณคิดว่ามันจะดีกว่าคนอื่น ๆ (ฉันไม่ต้องการคำตอบที่$(this).is(':selected')จะได้รับการยอมรับ Stackoverflow ควรใช้เพื่อเรียนรู้วิธีปฏิบัติที่ดีที่สุดไม่ใช่ข้อผิดพลาดทั่วไป ... )
gdoron ให้การสนับสนุนโมนิกา

3

คุณสามารถใช้วิธีนี้โดย 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

ใช้

 $("#mySelectBox option:selected");

เพื่อทดสอบว่าเป็นตัวเลือกใดโดยเฉพาะmyoption:

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

ไม่ได้ลงคะแนนคุณ (มี downvotes อนุกรมที่นี่!) แต่อะไรคือmyoption???
gdoron ให้การสนับสนุนโมนิก้า

1
เพียงแค่สตริงที่ควรจะเป็นตัวเลือกตัวอย่างที่ OP ต้องการทดสอบว่าเลือกหรือไม่
Mouna Cheikhna

เกี่ยวกับ downvote คุณอาจต้องการที่จะอ่านความคิดเห็นภายใต้คำตอบของฉัน
gdoron ให้การสนับสนุน Monica

2

พิจารณาสิ่งนี้เป็นรายการที่คุณเลือก:

<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>

จากนั้นคุณตรวจสอบตัวเลือกที่เลือกดังนี้:

function doSomething(param) {

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

}

0

ในกรณีของฉันฉันไม่รู้ว่าทำไมการเลือกนั้นเป็นจริงเสมอ ดังนั้นวิธีเดียวที่ฉันสามารถคิดได้คือ:

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

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

0

หากคุณต้องการตรวจสอบว่ามีการเลือกตัวเลือกหรือไม่คุณไม่จำเป็นต้องวนซ้ำตัวเลือกทั้งหมด แค่ทำ

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

หมายเหตุ: หากคุณมีตัวเลือกที่มี value = 0 ที่คุณต้องการให้เลือกคุณจะต้องเปลี่ยน if-condition เป็น $('#mySelectBox').val() != null


0

หากคุณต้องการตรวจสอบสถานะตัวเลือกที่เลือกสำหรับค่าเฉพาะ :

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

0

หากคุณต้องการตรวจสอบตัวเลือกที่เลือกผ่านจาวาสคริปต์

วิธีที่ง่ายที่สุดคือการเพิ่มคุณสมบัติการเปลี่ยนในแท็กนั้นและกำหนดฟังก์ชั่นในไฟล์ js ดูตัวอย่างว่าไฟล์ html ของคุณมีตัวเลือกดังนี้

 <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>

และตอนนี้เพิ่มฟังก์ชั่นในไฟล์ js

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

หากคุณต้องการตรวจสอบตัวเลือกที่เลือกในไฟล์ php

เพียงให้แอตทริบิวต์ชื่อในแท็กของคุณและเข้าถึง php ไฟล์ตัวแปร / อาเรย์ส่วนกลาง ($ _GET หรือ $ _POST) ดูตัวอย่างหากไฟล์ html ของคุณเป็นแบบนี้

<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>

และในไฟล์ php validation.php ของคุณคุณสามารถเข้าถึงได้เช่นนี้

$subject = $_POST['subject'];
echo "selected option is $subject";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.