Come verificare se un'opzione è selezionata?


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

Apparentemente, il isCheckednon funziona. Quindi la mia domanda è qual è il modo corretto per farlo? Grazie.


2
00zebra00, grazie per aver trovato una risposta tra le molte opzioni di seguito. Tuttavia, assicurati di annotare la conversazione nei commenti seguenti sul modo "migliore" per accedere alla proprietà selezionata. L'essenza generale è che quando puoi accedere direttamente a un elemento in javascript (usando this.selected) che dovresti bypassare usando jQuery ( $(this).prop("selected")) ma funzioneranno entrambi per te.
veeTrain

Risposte:


263

AGGIORNARE

Un metodo jQuery più diretto sull'opzione selezionata sarebbe:

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

Rispondere alla domanda .is(':selected')è quello che stai cercando:

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

Il modo non jQuery (probabilmente la migliore pratica) per farlo sarebbe:

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

Tuttavia, se stai solo cercando il valore selezionato prova:

$('#mySelectBox').val()

Se stai cercando il testo del valore selezionato:

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

Dai un'occhiata: http://api.jquery.com/selected-selector/

La prossima volta cerca domande SO duplicate:

Ottieni l'opzione attualmente selezionata o Imposta l'opzione selezionata o Come ottenere l' opzione $ (questa) selezionata in jQuery? o l' opzione [selected = true] non funziona


Usa jQuery senza una buona ragione. usa le proprietà native js DOM. dai un'occhiata a questo
gdoron supporta Monica il

3
Sembra che tu non abbia letto la mia risposta. this.selectedpuò essere usato al posto di $(this).is(":selected")suppongo che non sia necessario un jsperf per questo, giusto? Non ho nulla contro l'uso di jQuery !, ma usalo quando ne hai bisogno, non quando non dà altro che overhead e altro codice.
gdoron sostiene Monica il

@gdoron this.selectedè completamente valido ma ha chiesto il modo jQuery corretto per farlo.
iambriansreed

2
@gdoron Sono totalmente d'accordo con te. Forse quelli di noi cresciuti su jQuery devono seguire una classe JavaScript correttiva. :)
iambriansreed

2
@gmoron No, la mia domanda è stata votata in negativo e votata in alto. Ottimo lavoro investigativo però.
iambriansreed

26

È possibile ottenere l'opzione selezionata in questo modo:

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

DIMOSTRAZIONE DAL VIVO

Ma se vuoi iterare tutte le opzioni, fallo this.selectedinvece del this.isCheckedquale non esiste:

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

DIMOSTRAZIONE DAL VIVO

Aggiornare:

Hai un sacco di risposte che ti suggeriscono di usare questo:

$(this).is(':selected')bene, può essere fatto molto più velocemente e più facilmente, this.selectedquindi perché dovresti usarlo e non il metodo dell'elemento DOM nativo ?!

Leggi Conosci le proprietà e le funzioni del DOM nelle jQuery informazioni sui tag


1
@downvoter, ti interessa commentare? esci dall'ombra e combatti! :)
gdoron supporta Monica il

Forse perché non hai risposto alla domanda ma hai dato le migliori pratiche. ;)
iambriansreed

1
@iambriansreed. Ha ?! Non ho risposto alla domanda? quale parte della domanda è rimasta senza risposta?
gdoron sostiene Monica il

2
Discussioni interessanti qui. :) Non sono sicuro del motivo per cui tutti i DV, ma ho UV tutti quelli che hanno usato this.selected. Sono d'accordo con i tuoi commenti sull'uso / abuso di jQuery. Parte della conoscenza di jQuery è sapere quando non utilizzarlo. Detto questo, tieni presente che il ':selected'selettore è un selettore Sizzle personalizzato, quindi il suo utilizzo disabilita l'uso dei querySelectorAllbrowser supportati. Non è certamente la fine del mondo, dal momento che fornisce alcuni codici brevi, ma personalmente tendo a evitare le cose solo Sizzle.

@gdoron Mentre mi ponevi questa domanda in Meta, mi sono interessato. Per quanto riguarda DV, questo nodo potrebbe esserti utile.
VisioN,

4

Se non hai familiarità o dimestichezza is(), puoi semplicemente controllare il valore di prop("selected").

Come visto qui :

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

Modifica :

Come sottolineato da @gdoron nei commenti, il modo più rapido e appropriato per accedere alla proprietà selezionata di un'opzione è tramite il selettore DOM. Ecco l' aggiornamento del violino che mostra questa azione.

if (this.selected == true) {

sembra funzionare altrettanto bene! Grazie Gdoron.


Puoi spiegarmi perché dovrebbe usare $(this).prop("selected")invece di this.selected?! cosa ti dà ??! ps non sono il downvoter ...
gdoron sostiene Monica il

@gdoron, il vantaggio principale che ho pensato era la familiarità. Non sono sicuro di cosa issia meglio usare, ma mi piace accedere alle mie proprietà prop e attr. Nella maggior parte degli scenari potrebbe essere solo una questione di gusti. Sì, c'è una curiosa eruzione di voti negativi!
veeTrain,

2
Suggerisco di leggere la parte Conosci le proprietà e le funzioni del DOM delle jQuery informazioni sui tag . non c'è motivo di usare un codice più lento + più codice per fare cose semplici. .is()dovrebbe essere usato per un selettore complicato come $(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like $ (...). is (": visibile").
gdoron sostiene Monica il

@gdoron; grazie mille per averlo sottolineato. Ho aggiornato la mia risposta di conseguenza.
veeTrain,

Nessun problema. Puoi votare la mia risposta se pensi che sia meglio degli altri. (Non voglio che la risposta $(this).is(':selected')venga accettata. Stackoverflow dovrebbe essere usato per imparare le migliori pratiche, non errori comuni ...)
gdoron supporta Monica il

3

È possibile utilizzare in questo modo da 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

uso

 $("#mySelectBox option:selected");

per verificare se si tratta di un'opzione particolare myoption:

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

Non ti ha sottovalutato (c'è un declassamento seriale qui!) Ma cos'è myoption???
gdoron sostiene Monica il

1
solo una stringa che dovrebbe essere un'opzione di esempio che l'OP vuole testare se è selezionata
Mouna Cheikhna,

Per quanto riguarda il downvote, potresti voler leggere i commenti sotto la mia risposta .
gdoron sostiene Monica il

2

Considera questo come il tuo elenco selezionato:

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

quindi controlli l'opzione selezionata in questo modo:

function doSomething(param) {

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

}

0

Nel mio caso non so perché la selezione sia sempre vera. Quindi l'unico modo in cui sono stato in grado di pensare è:

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

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

0

Se si desidera solo verificare se un'opzione è selezionata, non è necessario scorrere tutte le opzioni. Basta fare

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

Nota: se si dispone di un'opzione con valore = 0 che si desidera sia selezionabile, è necessario modificare la condizione if in $('#mySelectBox').val() != null


0

Se è necessario selezionare l'opzione stato selezionato per un valore specifico :

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

0

Se vuoi controllare l'opzione selezionata tramite javascript

Il metodo più semplice è aggiungere l'attributo onchange in quel tag e definire una funzione nel file js vedi esempio se il tuo file html ha opzioni simili a questa

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

E ora aggiungi la funzione nel file js

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

Se vuoi controllare l'opzione selezionata nel file php

Basta dare l'attributo name nel tuo tag e accedervi variabili / array globali del file php ($ _GET o $ _POST) vedi esempio se il tuo file html è simile a questo

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

E nel tuo file php validation.php puoi accedere in questo modo

$subject = $_POST['subject'];
echo "selected option is $subject";
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.