jquery select change event obtener la opción seleccionada


235

Ligé un evento en el evento de cambio de mis elementos seleccionados con esto:

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

});

¿Cómo puedo acceder al elemento que se seleccionó cuando ocurre el evento de cambio?


1
¿Por qué dices eso?
— Miguel

3
@superuberduper Evité jquery todo el tiempo que pude, pero la resistencia es inútil. Te sentirás mucho mejor después de haber sido asimilado.
— adg

lolol @adg tan bueno!
— SuperUberDuper

Respuestas:


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

8
¿Qué significa la sintaxis $ ("selector", esto)? Tengo una idea general, pero no estoy totalmente seguro
— JoshWillik

14
@JoshWillik con $("selector", this)usted está encontrando todos los selectorelementos dentro thisdel contexto. Escribir $("selector", this)es casi lo mismo que $(this).find('selector')
— Bellash

8
@JoshWillik: como $()es un alias de jQuery(), puede encontrar la documentación aquí: api.jquery.com/jQuery La firma indicada allí es obviamente jQuery( selector [, context ] ). @Bellash: si es "casi lo mismo", ¿cuál es la diferencia? ¿O qué es más rápido? Prefiero .find()ya que esto es más OO IMO ...
— Adrian Föder

77
¿Cómo verificar en caso de selección múltiple?
— Hemant_Negi

3
@ AdrianFöder Para usted y otras personas que lo buscan, .find()es aproximadamente un 10% más rápido según esta respuesta: stackoverflow.com/a/9046288/2767703
— Kevin van Mierlo

75

Puedes usar el método de búsqueda jQuery

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

La solución anterior funciona perfectamente, pero elijo agregar el siguiente código para ellos dispuestos a obtener la opción de hacer clic. Le permite obtener la opción seleccionada incluso cuando este valor seleccionado no ha cambiado. (Probado solo con Mozilla)

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

La vinculación a optioneventos es una propuesta arriesgada, especialmente en dispositivos móviles. Por ejemplo, Webkit no admite este evento correctamente: bugs.chromium.org/p/chromium/issues/detail?id=5284
— Ian Kemp

¡Está bien! Como dije, ¡la segunda solución no es compatible con muchos navegadores!
— Bellash

15

Alternativa delegada

En caso de que alguien esté usando el enfoque delegado para su oyente, úselo e.target(se referirá al 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 porque esto es lo que quiero, pero cuando probé esto localmente, no funciona. Solo funciona en jsfiddle, ¿qué CDN debo agregar?
— AVI

6

Esto me parece más corto y más limpio. Además, puede recorrer los elementos seleccionados si hay más de uno;

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

selectedOptionsno está disponible en todos los navegadores.
— Bernhard Döbler

@ BernhardDöbler, ¿cuáles? alguna fuente?
— 1.44mb

1
Copié tu código a IE 11 y recibí un error. Terminé con this.options[ this.options.selectedIndex ]. Mozilla dice que es compatible con Firefox desde 26, IE Sin soporte.
— Bernhard Döbler

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();
});

Primero crea a select option. Después de ese uso jquery, puede obtener el valor seleccionado actual cuando el usuario cambia el select optionvalor.


1
¿podría por favor compartir una explicación más detallada de su respuesta?
— Mostafiz

@MostafizurRahman mi código es muy fácil, por eso escribí solo código.

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

2

Otra forma corta de obtener el valor del valor seleccionado,

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

si este es el caso, ¿por qué no "var selectedVal = $ (" # selectElement "). val ()" work¿
— LuisE

El caso está obteniendo valor cuando se produce un evento de cambio en el elemento seleccionado. El valor no se actualizará cuando seleccione cambios si le gusta.
— Recep Can

0

Consulte la documentación oficial de la API https://api.jquery.com/selected-selector/

Esto funciona bien:

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

y

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

y ser fácil para una elección única

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

0

Puede usar este evento jquery select change para obtener el valor de la opción seleccionada

Para demostración

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.