Controlla se l'opzione è selezionata con jQuery, se non seleziona un valore predefinito


207

Utilizzando jQuery, come si fa a verificare se è presente un'opzione selezionata in un menu di selezione e, in caso contrario, assegnare una delle opzioni selezionate.

(La selezione viene generata con un labirinto di funzioni PHP in un'app che ho appena ereditato, quindi questa è una soluzione rapida mentre mi metto la testa intorno :)


Risposte:


270

Anche se non sono sicuro di esattamente cosa vuoi realizzare, questo pezzo di codice ha funzionato per me.

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>

86
La selezione sarebbe più semplice da leggere in questo modo:$("#mySelect").val(3);
Jørn Schou-Rode,

6
Questo mi ha portato sulla strada giusta, ma dovevo farlo: $("#mySelect option")[2]['selected'] = true; capito dopo aver investigato le strutture degli oggetti in Firebug.
sempre

28
A partire da jQuery 1.6 è possibile impostare direttamente la proprietà. $("#mySelect").prop("selectedIndex", 2)
gradbot

1
La versione .val (x) non funziona in Internet Explorer 8, quindi @gradbot ha ragione, poiché funziona in tutti i browser.
Sorcy,

30

Non è necessario utilizzare jQuery per questo:

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}

58
L'OP ha dichiarato, "Utilizzo di jQuery ...", quindi sembra superfluo ignorarlo, no?
BryanH

13
Personalmente, se faccio una domanda specifica, vorrei ottenere la risposta per la domanda invece di un modo diverso.
vitto

18
A volte la risposta che cerchi non è quella che ti aspetti.
MrBoJangles,

5
Indipendentemente da ciò, ha chiesto jQuery e la risposta di jQuery è un po 'più facile da capire, soprattutto se non si capisce JavaScript di base.
Shmeeps

6
Ottimo modo per farlo, a volte javascript di base può essere molto utile!
Hallaghan,

13

Questa domanda è vecchia e ha molti punti di vista, quindi lancerò alcune cose là fuori che aiuteranno alcune persone, ne sono sicuro.

Per verificare se un elemento selezionato ha elementi selezionati:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

o per verificare se una selezione non ha nulla selezionato:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

o se sei in un ciclo di qualche tipo e vuoi verificare se l'elemento corrente è selezionato:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

per verificare se un elemento non è selezionato durante un ciclo:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

Questi sono alcuni dei modi per farlo. jQuery ha molti modi diversi per ottenere lo stesso risultato, quindi di solito scegli quello che sembra essere il più efficiente.


"not" non ha funzionato per me $ ('# opzione mySelect'). each (function () {if ($ (this) .not (': selected')) {..}}); Quindi una negazione usata è come se (! $ (This) .is (': selected')) {..} Browser: Chrome; Versione Jquery: 3.1.1
Anil kumar,

12

La risposta di lencioni è quella che consiglierei. È possibile modificare il selettore per l'opzione ('#mySelect option:last')per selezionare l'opzione con un valore specifico utilizzando " #mySelect option[value='yourDefaultValue']". Altro su selettori .

Se lavori ampiamente con elenchi selezionati sul client, dai un'occhiata a questo plugin: http://www.texotela.co.uk/code/jquery/select/ . Dai un'occhiata alla fonte se vuoi vedere altri esempi di come lavorare con gli elenchi selezionati.


9

Ecco la mia funzione che cambia l'opzione selezionata. Funziona con jQuery 1.3.2

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}

7
<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length)
   $("#mySelect").val( 3 );

});
</script>


3

Mi sono già imbattuto nel plugin texotela menzionato, che mi ha permesso di risolverlo in questo modo:

$(document).ready(function(){
    if ( $("#context").selectedValues() == false) {
    $("#context").selectOptions("71");
    }
});

2

Guardate il selectedIndex del selectelemento. A proposito, questa è una cosa del DOM semplice, non specifica per JQuery.


2

Questa è stata una sceneggiatura che ho scoperto che ha funzionato ... Il risultato è assegnato a un'etichetta.

$(".Result").html($("option:selected").text());

1

Ragazzi, state facendo troppo per la selezione. Basta selezionare per valore:

$("#mySelect").val( 3 );

2
Questa è la selezione dell'opzione 3 indipendentemente dal fatto che sia già selezionata un'altra opzione.
Jordan Ryan Moore,


1

Ho trovato un buon modo per verificare, se l'opzione è selezionata e selezionare un valore predefinito quando non lo è.

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

Se #some_select non ha l'opzione selezionata per impostazione predefinita, allora .val () non è definito


0
$("option[value*='2']").attr('selected', 'selected');
// 2 for example, add * for every option

0
$("#select_box_id").children()[1].selected

Questo è un altro modo per verificare che un'opzione sia selezionata o meno in jquery. Questo restituirà Booleano (Vero o Falso).

[1] è l'indice dell'opzione box di selezione


0

Cambia l'evento sulla casella di selezione per attivarlo e una volta che lo fa, basta tirare l'attributo id dell'opzione selezionata: -

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});

0

Stavo solo cercando qualcosa di simile e ho trovato questo:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

Questo trova tutti i menu selezionati nella classe che non hanno già un'opzione selezionata e seleziona l'opzione predefinita ("2" in questo caso).

Ho provato a utilizzare :selectedinvece di [selected], ma non ha funzionato perché qualcosa è sempre selezionato, anche se nulla ha l'attributo


0

Se hai bisogno di controllare esplicitamente ogni opzione per vedere se qualcuno ha l'attributo "selezionato" puoi farlo. Altrimenti usando option:selectedotterrai il valore per la prima opzione predefinita.

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
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.