Bagaimana cara memeriksa apakah suatu opsi dipilih?

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

Tampaknya, isCheckeditu tidak berhasil. JADI pertanyaan saya adalah apa cara yang tepat untuk melakukan ini? Terima kasih.

0x56794E
sumber
2
00zebra00, terima kasih telah menemukan jawaban di antara banyak opsi di bawah ini. Namun, pastikan untuk membuat pemberitahuan tentang percakapan di komentar di bawah ini tentang cara 'terbaik' untuk mengakses properti yang dipilih. Inti umum adalah bahwa ketika Anda dapat mengakses elemen secara langsung di javascript (menggunakan this.selected) yang Anda harus memotong menggunakan jQuery ( $(this).prop("selected")) tetapi mereka berdua akan bekerja untuk Anda.
veeTrain
Kemungkinan rangkap dari jQuery Dapatkan Opsi Terpilih Dari Dropdown
Iman Kermani

Jawaban:

263

MEMPERBARUI

Metode jQuery yang lebih langsung ke opsi yang dipilih adalah:

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

Menjawab pertanyaan .is(':selected')adalah apa yang Anda cari:

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

Cara non jQuery (bisa dibilang praktik terbaik) untuk melakukannya adalah:

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

Meskipun, jika Anda hanya mencari nilai yang dipilih coba:

$('#mySelectBox').val()

Jika Anda mencari teks nilai yang dipilih lakukan:

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

Lihat: http://api.jquery.com/selected-selector/

Lain kali cari pertanyaan duplikat SO:

Dapatkan opsi yang dipilih saat ini atau Setel opsi yang dipilih atau Cara mendapatkan $ (ini) opsi yang dipilih di jQuery? atau opsi [terpilih = benar] tidak berfungsi

iambriansed
sumber
Ini menggunakan jQuery tanpa alasan. gunakan properti js DOM asli. lihat ini
gdoron mendukung Monica
3
Sepertinya Anda tidak membaca jawaban saya. this.selecteddapat digunakan daripada $(this).is(":selected")kurasa tidak perlu jsperf untuk ini, kan? Saya tidak menentang penggunaan jQuery !, tetapi menggunakannya saat Anda membutuhkannya, bukan ketika itu memberikan apa-apa selain overhead dan lebih banyak kode.
gdoron mendukung Monica
@ gdoron this.selectedsepenuhnya valid tetapi ia meminta cara jQuery yang tepat untuk melakukannya.
iambriansreed
2
@ gdoron Saya sangat setuju dengan Anda. Mungkin kita semua dibesarkan di jQuery perlu mengambil kelas JavaScript perbaikan. :)
iambriansreed
2
@ Gmoron Tidak, pertanyaan saya tidak digunakan dan dipilih. Pekerjaan detektif yang bagus.
iambriansreed
26

Anda bisa mendapatkan opsi yang dipilih dengan cara ini:

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

LIVE DEMO

Tetapi jika Anda ingin iterate semua pilihan, melakukannya dengan this.selectedbukan this.isCheckedyang tidak ada:

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

LIVE DEMO

Memperbarui:

Anda mendapat banyak jawaban yang menyarankan Anda untuk menggunakan ini:

$(this).is(':selected')baik, itu bisa dilakukan jauh lebih cepat dan lebih mudah dengan this.selectedjadi mengapa Anda harus menggunakannya dan bukan metode elemen DOM asli ?!

Baca Mengenal Properti DOM Anda dan Fungsi di jQuery info tag

gdoron mendukung Monica
sumber
1
@ downvoter, mau berkomentar? keluar dari bayangan dan bertarung! :)
gdoron mendukung Monica
Mungkin karena Anda tidak menjawab pertanyaan tetapi memberikan praktik terbaik. ;)
iambriansreed
1
@ iambriansreed. Ha?! Saya tidak menjawab pertanyaan itu? bagian mana dari pertanyaan yang tetap tidak terjawab?
gdoron mendukung Monica
2
Diskusi menarik di sini. :) Tidak yakin mengapa semua DV, tapi saya UV semua orang yang menggunakan this.selected. Saya setuju dengan komentar Anda tentang penggunaan berlebihan / penyalahgunaan jQuery. Bagian dari mengetahui jQuery, adalah mengetahui kapan tidak menggunakannya. Yang mengatakan, perlu diingat bahwa ':selected'pemilih adalah pemilih Sizzle kustom, jadi menggunakannya menonaktifkan penggunaan querySelectorAlldi browser yang didukung. Ini jelas bukan akhir dari dunia, karena ia menyediakan beberapa kode pendek yang bagus, tetapi saya pribadi cenderung menghindari hal-hal khusus.
@ gdoron Saat Anda mengarahkan pertanyaan ini di Meta, saya tertarik. Mengenai DV, simpul ini mungkin bermanfaat bagi Anda.
VisioN
4

Jika Anda tidak terbiasa atau tidak nyaman is(), Anda bisa memeriksa nilainya prop("selected").

Seperti yang terlihat di sini :

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

Edit :

Sebagaimana @gdoron tunjukkan dalam komentar, cara tercepat dan paling tepat untuk mengakses properti pilihan adalah melalui pemilih DOM. Berikut adalah pembaruan biola yang menampilkan tindakan ini.

if (this.selected == true) {

tampaknya bekerja dengan baik! Terima kasih gdoron.

veTrain
sumber
Bisakah Anda jelaskan kepada saya mengapa ia harus menggunakan $(this).prop("selected")bukan this.selected?! apa yang kamu berikan ?? ps aku bukan downvoter ...
gdoron mendukung Monica
@ Gdoron, keuntungan utama yang saya pikirkan adalah keakraban. Saya tidak yakin apa isyang paling baik digunakan untuk tetapi saya suka mengakses properti saya dengan prop dan attr. Dalam kebanyakan skenario, itu mungkin hanya masalah selera. Ya, ada ruam down-voting!
veeTrain
2
Saya sarankan untuk membaca bagian Know Your DOM Properties and Functions dari jQuery info tag . tidak ada alasan untuk menggunakan kode lebih lambat + lebih banyak kode untuk melakukan hal sederhana. .is()harus digunakan untuk pemilih rumit seperti $(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like $ (...). is (": visable").
gdoron mendukung Monica
@gdoron; terima kasih banyak untuk menunjukkan itu. Saya telah memperbarui jawaban saya sesuai dengan itu.
veeTrain
Tidak masalah. Anda dapat meningkatkan jawaban saya jika Anda pikir lebih baik daripada yang lain. (Saya tidak ingin jawaban $(this).is(':selected')diterima. Stackoverflow harus digunakan untuk mempelajari praktik terbaik, bukan kesalahan umum ...)
gdoron mendukung Monica
3

Anda dapat menggunakan cara ini dengan 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>

Amir
sumber
2

menggunakan

 $("#mySelectBox option:selected");

untuk menguji apakah ini pilihan tertentu myoption:

 if($("#mySelectBox option:selected").text() == myoption){
          //...
 }
Mouna Cheikhna
sumber
Tidak menurunkan Anda (ada seri downvote di sini!) Tapi apa myoption???
gdoron mendukung Monica
1
hanya sebuah string yang seharusnya menjadi opsi contoh yang ingin diuji oleh OP jika dipilih
Mouna Cheikhna
Mengenai downvote, Anda mungkin ingin membaca komentar di bawah jawaban saya .
gdoron mendukung Monica
2

Pertimbangkan ini sebagai daftar pilih Anda:

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

maka Anda memeriksa opsi yang dipilih seperti ini:

function doSomething(param) {

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

}
Masoud Darvishian
sumber
0

Dalam kasus saya, saya tidak tahu mengapa yang dipilih selalu benar. Jadi satu-satunya cara saya dapat berpikir adalah:

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

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

Jika Anda hanya ingin memeriksa apakah suatu opsi dipilih, maka Anda tidak perlu mengulangi semua opsi. Kerjakan saja

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

Catatan: Jika Anda memiliki opsi dengan nilai = 0 yang ingin Anda pilih, Anda perlu mengubah jika-kondisi ke $('#mySelectBox').val() != null

Adam
sumber
0

Jika Anda perlu memeriksa opsi negara yang dipilih untuk nilai tertentu :

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

Jika Anda ingin memeriksa opsi yang dipilih melalui javascript

Metode paling sederhana adalah menambahkan atribut onchange di tag itu dan mendefinisikan fungsi dalam file js lihat contohnya jika file html Anda memiliki opsi seperti ini

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

Dan sekarang tambahkan fungsi dalam file js

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

Jika Anda ingin memeriksa opsi yang dipilih dalam file php

Cukup berikan atribut nama di tag Anda dan akseslah file php variabel global / array ($ _GET atau $ _POST) lihat contohnya jika file html Anda mirip dengan ini

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

Dan di file php Anda validation.php Anda dapat mengakses seperti ini

$subject = $_POST['subject'];
echo "selected option is $subject";
Abhishek Pratap Singh
sumber