¿Cómo se selecciona una opción en particular en un elemento SELECT en jQuery?

741
Jay Corbett 2008-11-25 06:18.

Si conoce el índice, el valor o el texto. también si no tiene una identificación para una referencia directa.

Esto , esto y esto son respuestas útiles.

Marcado de ejemplo

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

21 answers

1243
Grastveit 2011-05-20 20:38.

Un selector para obtener el elemento de opción del medio por valor es

$('.selDiv option[value="SEL1"]')

Para un índice:

$('.selDiv option:eq(1)')

Para un texto conocido:

$('.selDiv option:contains("Selection 1")')

EDITAR : Como se comentó anteriormente, el OP podría haber sido después de cambiar el elemento seleccionado del menú desplegable. En la versión 1.6 y superior, se recomienda el método prop ():

$('.selDiv option:eq(1)').prop('selected', true)

En versiones anteriores:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : después del comentario de Ryan. Es posible que no se desee una coincidencia en la "Selección 10". No encontré ningún selector que coincida con el texto completo, pero un filtro funciona:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : tenga cuidado, $(e).text()ya que puede contener una nueva línea que hace que la comparación falle. Esto sucede cuando las opciones están implícitamente cerradas (sin </option>etiqueta):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

Si simplemente usa e.textcualquier espacio en blanco adicional, como el salto de línea final, se eliminará, lo que hará que la comparación sea más sólida.

130
user1074546 2011-12-01 15:05.

Ninguno de los métodos anteriores proporcionó la solución que necesitaba, así que pensé que proporcionaría lo que funcionó para mí.

$('#element option[value="no"]').attr("selected", "selected");
85
Leandro Ardissone 2009-12-03 09:49.

Puedes usar el val()método:

$('select').val('the_value');
61
mpoletto 2013-05-08 04:14.

Por valor, lo que funcionó para mí con jQuery 1.7 fue el siguiente código, intente esto:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
17
Gone Coding 2016-09-07 01:50.

Hay varias formas de hacer esto, pero el enfoque más limpio se ha perdido entre las mejores respuestas y muchos argumentos val(). Además, algunos métodos cambiaron a partir de jQuery 1.6, por lo que necesita una actualización.

Para los siguientes ejemplos, asumiré que la variable $selectes un objeto jQuery que apunta a la <select>etiqueta deseada , por ejemplo, a través de lo siguiente:

var $select = $('.selDiv .opts');

Nota 1: use val () para coincidencias de valores:

Para la coincidencia de valores, usar val()es mucho más simple que usar un selector de atributos:https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

La versión de establecimiento de .val()se implementa en selectetiquetas estableciendo la selectedpropiedad de una coincidencia optioncon las mismas value, por lo que funciona bien en todos los navegadores modernos.

Nota 2: use prop ('seleccionado', verdadero):

Si desea establecer el estado seleccionado de una opción directamente, puede usar prop(no attr) con un booleanparámetro (en lugar del valor de texto selected):

p.ej https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

Nota 3: permita valores desconocidos:

Si usa val()para seleccionar un <option>, pero el valor no coincide (puede suceder dependiendo de la fuente de los valores), entonces se selecciona "nada" y $select.val()regresará null.

Entonces, para el ejemplo que se muestra, y en aras de la robustez, podría usar algo como esto https://jsfiddle.net/1250Ldqn/:

var $select = $('.selDiv .opts');
$select.val("SEL2"); if ($select.val() == null) {
  $select.val("DEFAULT");
}

Nota 4 - coincidencia exacta del texto:

Si desea hacer coincidir por texto exacto, puede usar una filterfunción with. p.ejhttps://jsfiddle.net/yz7tu49b/2/:

var $select = $('.selDiv .opts'); $select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

aunque si puede tener espacios en blanco adicionales, es posible que desee agregar un recorte al cheque como en

    return $.trim(this.text) == "some value to match";

Nota 5 - coincidencia por índice

Si desea hacer coincidir por índice, simplemente indexe los hijos de la selección, por ejemplo https://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts'); var index = 2; $select.children()[index].selected = true;

Aunque tiendo a evitar las propiedades DOM directas a favor de jQuery hoy en día, al código a prueba de futuro, por lo que también podría hacerse como https://jsfiddle.net/yz7tu49b/5/:

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Nota 6: use change () para disparar la nueva selección

En todos los casos anteriores, el evento de cambio no se activa. Esto es por diseño para que no termine con eventos de cambio recursivos.

Para generar el evento de cambio, si es necesario, simplemente agregue una llamada al objeto .change()jQuery select. por ejemplo, el primer ejemplo más simple se convierte enhttps://jsfiddle.net/yz7tu49b/7/

var $select = $('.selDiv .opts'); $select.val("SEL2").change();

También hay muchas otras formas de encontrar los elementos usando selectores de atributos, como [value="SEL2"], pero debe recordar que los selectores de atributos son relativamente lentos en comparación con todas estas otras opciones.

13
Sandro 2012-02-02 07:34.

Podrías nombrar la selección y usar esto:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

Debe seleccionar la opción que desee.

12
João Paulo Oliveira 2014-12-17 08:17.
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");
10
perumal N 2018-02-17 19:04.

Exactamente funcionará, pruebe los siguientes métodos

Para la opción de selección normal

<script>    
    $(document).ready(function() { $("#id").val('select value here');
       });
        </script>

Para seleccionar 2 opciones, la opción de disparo debe usar

<script>    
        $(document).ready(function() { $("#id").val('select value here').trigger('change');
           });
            </script>
9
Jay Corbett 2008-11-25 06:19.

Respondiendo a mi propia pregunta para la documentación. Estoy seguro de que hay otras formas de lograr esto, pero esto funciona y este código está probado.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() { $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ; var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected"); // $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected"); // $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected"); // $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>
9
Nick Tsai 2017-06-06 19:54.

Para configurar el valor de selección con disparo seleccionado:

$('select.opts').val('SEL1').change();

Para configurar la opción desde un alcance:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Este código usa el selector para encontrar el objeto seleccionado con condición, luego cambia el atributo seleccionado por attr().


Además, recomiendo agregar change()evento después de configurar el atributo selected, al hacer esto, el código se cerrará para cambiar la selección por usuario.

8
raddevus 2016-01-06 04:58.

Usando jquery-2.1.4 , encontré que la siguiente respuesta me funciona:

$('#MySelectionBox').val(123).change();

Si tiene un valor de cadena, intente lo siguiente:

$('#MySelectionBox').val("extra thing").change();

Otros ejemplos no me funcionaron, por eso agrego esta respuesta.

Encontré la respuesta original en: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu

6
Miguel 2013-10-12 03:47.

Yo uso esto, cuando conozco el índice de la lista.

$("#yourlist :nth(1)").prop("selected","selected").change();

Esto permite que la lista cambie y active el evento de cambio. El ": nth (n)" cuenta desde el índice 0

6
perumal N 2017-09-23 08:27.

Prueba esto

solo usa seleccionar id de campo en lugar de #id (es decir, # select_name)

en lugar de valor de opción de usar su opción de selección de valor

 <script>
    $(document).ready(function() { $("#id option[value='option value']").attr('selected',true);
   });
    </script>
5
user2606817 2013-08-14 22:05.

iré con: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
3
Andrej Gaspar 2013-03-02 04:11.

Para Jquery elegido si envía el atributo a la función y necesita actualizar la opción de selección

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected'); $('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
3
Pratik Kamani 2016-05-30 20:49.
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() { $("#gate option[value='']").prop('selected', true);
    });
    </script>
1
Jitesh Sojitra 2015-11-15 21:35.

El $('select').val('the_value');ve la solución correcta y si tiene filas de la tabla de datos a continuación:

$row.find('#component').val('All');
1
FLICKER 2016-02-04 16:06.

Si no desea usar jQuery, puede usar el siguiente código:

document.getElementById("mySelect").selectedIndex = "2";
1
Md. Russel Hussain 2016-10-23 18:12.

Gracias por la pregunta Espero que este código te funcione.

var val = $("select.opts:visible option:selected ").val();
0
Tony Duran 2019-07-10 02:53.
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

o

$('#select option[value="myValue"]').prop("selected",true).trigger("change");
0
Richard 2020-08-16 16:34.

Hay algunas sugerencias por las que debería usar en proplugar de attr.Definitivamente usar, propya que he probado ambos y attrle darán resultados extraños, excepto en los casos más simples.

Quería una solución en la que la selección de selectopciones agrupadas arbitrariamente seleccionara automáticamente otra selectentrada en esa misma página. Por ejemplo, si tiene 2 menús desplegables, uno para países y otro para continentes. En este escenario, al seleccionar cualquier país, se seleccionó automáticamente el continente de ese país en el menú desplegable del otro continente.

$("#country").on("change", function() { //get continent var originLocationRegion = $(this).find(":selected").data("origin-region");

  //select continent correctly with prop
  $('#continent option[value="' + originLocationRegion + '"]').prop('selected', true); }); $("#country2").on("change", function() {
  //get continent
  var originLocationRegion = $(this).find(":selected").data("origin-region"); //select continent wrongly with attr $('#continent2 option[value="' + originLocationRegion + '"]').attr('selected', true);
});
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="container">
  <form>
    <h4 class="text-success">Props to the good stuff ;) </h4>
    <div class="form-row">
      <div class="form-group col-md-6 col-sm-6">
        <label>Conuntries</label>
        <select class="custom-select country" id="country">
          <option disabled selected>Select Country </option>
          <option data-origin-region="Asia" value="Afghanistan">Afghanistan</option>
          <option data-origin-region="Antartica" value="Antartica">Antartica</option>
          <option data-origin-region="Australia" value="Australia">Australia</option>
          <option data-origin-region="Europe" value="Austria">Austria</option>
          <option data-origin-region="Asia" value="Bangladesh">Bangladesh</option>
          <option data-origin-region="South America" value="Brazil">Brazil</option>
          <option data-origin-region="Africa" value="Cameroon">Cameroon</option>
          <option data-origin-region="North America" value="Canada">Canada</option>
          <option data-origin-region="South America" value="Chile">Chile</option>
          <option data-origin-region="Asia" value="China">China</option>
          <option data-origin-region="South America" value="Ecuador">Ecuador</option>
          <option data-origin-region="Australia" value="Fiji">Fiji</option>
          <option data-origin-region="North America" value="Mexico">Mexico</option>
          <option data-origin-region="Australia" value="New Zealand">New Zealand</option>
          <option data-origin-region="Africa" value="Nigeria">Nigeria</option>
          <option data-origin-region="Europe" value="Portugal">Portugal</option>
          <option data-origin-region="Africa" value="Seychelles">Seychelles</option>
          <option data-origin-region="North America" value="United States">United States</option>
          <option data-origin-region="Europe" value="United Kingdom">United Kingdom</option>
        </select>
      </div>
      <div class="form-group col-md-6 col-sm-6">
        <label>Continent</label>
        <select class="custom-select" id="continent">
          <option disabled selected>Select Continent</option>
          <option disabled value="Africa">Africa</option>
          <option disabled value="Antartica">Antartica</option>
          <option disabled value="Asia">Asia</option>
          <option disabled value="Europe">Europe</option>
          <option disabled value="North America">North America</option>
          <option disabled value="Australia">Australia</option>
          <option disabled value="South America">South America</option>
        </select>
      </div>
    </div>
  </form>
  <hr>

  <form>
    <h4 class="text-danger"> Attributing the bad stuff to attr </h4>
    <div class="form-row">
      <div class="form-group col-md-6 col-sm-6">
        <label>Conuntries</label>
        <select class="custom-select country-2" id="country2">
          <option disabled selected>Select Country </option>
          <option data-origin-region="Asia" value="Afghanistan">Afghanistan</option>
          <option data-origin-region="Antartica" value="Antartica">Antartica</option>
          <option data-origin-region="Australia" value="Australia">Australia</option>
          <option data-origin-region="Europe" value="Austria">Austria</option>
          <option data-origin-region="Asia" value="Bangladesh">Bangladesh</option>
          <option data-origin-region="South America" value="Brazil">Brazil</option>
          <option data-origin-region="Africa" value="Cameroon">Cameroon</option>
          <option data-origin-region="North America" value="Canada">Canada</option>
          <option data-origin-region="South America" value="Chile">Chile</option>
          <option data-origin-region="Asia" value="China">China</option>
          <option data-origin-region="South America" value="Ecuador">Ecuador</option>
          <option data-origin-region="Australia" value="Fiji">Fiji</option>
          <option data-origin-region="North America" value="Mexico">Mexico</option>
          <option data-origin-region="Australia" value="New Zealand">New Zealand</option>
          <option data-origin-region="Africa" value="Nigeria">Nigeria</option>
          <option data-origin-region="Europe" value="Portugal">Portugal</option>
          <option data-origin-region="Africa" value="Seychelles">Seychelles</option>
          <option data-origin-region="North America" value="United States">United States</option>
          <option data-origin-region="Europe" value="United Kingdom">United Kingdom</option>
        </select>
      </div>
      <div class="form-group col-md-6 col-sm-6">
        <label>Continent</label>
        <select class="custom-select" id="continent2">
          <option disabled selected>Select Continent</option>
          <option disabled value="Africa">Africa</option>
          <option disabled value="Antartica">Antartica</option>
          <option disabled value="Asia">Asia</option>
          <option disabled value="Europe">Europe</option>
          <option disabled value="North America">North America</option>
          <option disabled value="Australia">Australia</option>
          <option disabled value="South America">South America</option>
        </select>
      </div>
    </div>
  </form>
</div>

Como se ve en el fragmento de código, propfunciona correctamente cada vez, pero attrno se selecciona correctamente una vez que se ha seleccionado la opción una vez.

Punto clave: estamos por lo general interesado en la propiedad del atributo, por lo que su seguro usar propmás de attren la mayoría de las situaciones.

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Actualice a un Sonicare por tan solo $ 30

Actualice a un Sonicare por tan solo $ 30

¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language