jquery select change event opzione selezionata


235

Ho associato un evento all'evento change dei miei elementi select con questo:

$('select').on('change', '', function (e) {

});

Come posso accedere all'elemento che è stato selezionato quando si verifica l'evento change?


1
Perché dici così?
Miguel,

3
@superuberduper Ho evitato jquery il più a lungo possibile, ma la resistenza è futile. Ti sentirai molto meglio dopo essere stato assimilato.
adg

lolol @adg così buono!
SuperUberDuper

Risposte:


461
$('select').on('change', function (e) {
    var optionSelected = $("option:selected", this);
    var valueSelected = this.value;
    ....
});

8
Cosa significa la sintassi $ ("selettore", questo)? Ho un'idea generale, ma non ne sono del tutto sicuro
JoshWillik,

14
@JoshWillik con $("selector", this)te stanno trovando tutti gli selectorelementi all'interno thisdel contesto. Scrivere $("selector", this)è quasi lo stesso di $(this).find('selector')
Bellash,

8
@JoshWillik: poiché $()è un alias di jQuery(), puoi trovare la documentazione qui: api.jquery.com/jQuery La firma dichiarata è ovviamente presente jQuery( selector [, context ] ). @Bellash: se è "quasi lo stesso", qual è la differenza? O cosa è più veloce? Preferisco .find()poiché questo è più OO IMO ...
Adrian Föder

7
Come verificare in caso di selezione multipla?
Hemant_Negi,

3
@ AdrianFöder Per te e le altre persone che lo cercano, .find()è circa il 10% più veloce in base a questa risposta: stackoverflow.com/a/9046288/2767703
Kevin van Mierlo,

75

È possibile utilizzare il metodo find di jQuery

 $('select').change(function () {
     var optionSelected = $(this).find("option:selected");
     var valueSelected  = optionSelected.val();
     var textSelected   = optionSelected.text();
 });

La soluzione sopra funziona perfettamente, ma ho scelto di aggiungere il seguente codice per loro disposti a ottenere l'opzione cliccata. Ti permette di ottenere l'opzione selezionata anche quando questo valore selezionato non è cambiato. (Testato solo con Mozilla)

    $('select').find('option').click(function () {
     var optionSelected = $(this);
     var valueSelected  = optionSelected.val();
     var textSelected   = optionSelected.text();
   });

Associarsi agli optioneventi è una proposta rischiosa, in particolare sui dispositivi mobili. Ad esempio, Webkit non supporta correttamente questo evento: bugs.chromium.org/p/chromium/issues/detail?id=5284
Ian Kemp

Ok bello! Come ho detto, la seconda soluzione non è supportata in molti browser!
Bellash,

15

Alternativa delegata

Nel caso in cui qualcuno stia utilizzando l' approccio delegato per il proprio listener, utilizzare e.target(farà riferimento all'elemento select).

$('#myform').on('change', 'select', function (e) {
    var val = $(e.target).val();
    var text = $(e.target).find("option:selected").text(); //only time the find is required
    var name = $(e.target).attr('name');
}

JSFiddle Demo


+1 perché è quello che voglio, ma quando l'ho provato localmente, non funziona. Solo lavorando su jsfiddle, quali sono i CDN che devo aggiungere?
AVI

6

Lo trovo più corto e pulito. Inoltre, puoi scorrere gli elementi selezionati se ce ne sono più di uno;

$('select').on('change', function () {
     var selectedValue = this.selectedOptions[0].value;
     var selectedText  = this.selectedOptions[0].text;
});

selectedOptionsnon è disponibile in tutti i browser.
Bernhard Döbler,

@ BernhardDöbler quali? qualche fonte?
1.44mb del

1
Ho copiato il tuo codice su IE 11 e ho ricevuto un errore. Ho finito con this.options[ this.options.selectedIndex ]. Mozilla afferma che è supportato da Firefox dal 26, IE Nessun supporto.
Bernhard Döbler il

6
<select id="selectId">
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
</select>


$('#selectId').on('change', function () {
     var selectVal = $("#selectId option:selected").val();
});

Per prima cosa crea un select option. Successivamente, jqueryè possibile ottenere il valore corrente selezionato quando l'utente cambia select optionvalore.


1
puoi per favore condividere maggiori dettagli sulla spiegazione della tua risposta?
Mostafiz,

@MostafizurRahman il mio codice è molto semplice, ecco perché ho scritto solo codice.

3
$('#_SelectID').change(function () {
        var SelectedText = $('option:selected',this).text();
        var SelectedValue = $('option:selected',this).val();
});

2

Un altro e breve modo per ottenere il valore selezionato,

$('#selectElement').on('change',function(){
   var selectedVal = $(this).val();
                       ^^^^  ^^^^ -> presents #selectElement selected value 
                         |
                         v
               presents #selectElement, 
});

in questo caso, perché non "var selectedVal = $ (" # selectElement "). val ()" work¿
LuisE

Il caso sta ottenendo valore quando l'evento change viene emesso sull'elemento select. Il valore non verrebbe aggiornato quando si seleziona cambia se ti piace.
Recep Can

0

Consulta la documentazione API ufficiale https://api.jquery.com/selected-selector/

Questo buon funziona:

$( "select" ).on('change',function() {
  var str = "";
  // For multiple choice
  $( "select option:selected" ).each(function() {
    str += $( this ).val() + " "; 
  });
});

e

$( "select" ).on('change',function() {
  // For unique choice
  var selVal = $( "select option:selected" ).val(); 
});

ed essere facile per una scelta unica

var SelVal = $( "#idSelect option:selected" ).val();

0

È possibile utilizzare questo evento di modifica della selezione jquery per ottenere il valore dell'opzione selezionata

Per la demo

$(document).ready(function () {   
    $('body').on('change','#select', function() {
         $('#show_selected').val(this.value);
    });
}); 
<!DOCTYPE html>  
<html>  
<title>Learn Jquery value Method</title>
<head> 
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 
</head>  
<body>  
<select id="select">
 <option value="">Select One</option>
    <option value="PHP">PHP</option>
    <option value="jAVA">JAVA</option>
    <option value="Jquery">jQuery</option>
    <option value="Python">Python</option>
    <option value="Mysql">Mysql</option>
</select>
<br><br>  
<input type="text" id="show_selected">
</body>  
</html>  

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.