Establezca la opción de selección 'seleccionado', por valor


952

Tengo un selectcampo con algunas opciones. Ahora necesito seleccionar uno de esos optionscon jQuery. Pero, ¿cómo puedo hacer eso cuando sólo conocer la valuede la optionque se debe seleccionar?

Tengo el siguiente HTML:

<div class="id_100">
  <select>
    <option value="val1">Val 1</option>
    <option value="val2">Val 2</option>
    <option value="val3">Val 3</option>
  </select>
</div>

Necesito seleccionar la opción con valor val2. ¿Cómo se puede hacer esto?

Aquí hay una página de demostración: http://jsfiddle.net/9Stxb/


Para el valor único de menú desplegable, use .val ('5') para selección múltiple, use val (['5', '4', '8']) demo completa freakyjolly.com/…
Code Spy

Respuestas:


1537

Hay una manera más fácil que no requiere que ingreses a la etiqueta de opciones:

$("div.id_100 select").val("val2");

Echa un vistazo a este método jQuery .


18
Esto puede causar errores en FF (al menos) en el cuadro de selección vacío
Jonathan

21
El póster de la pregunta comienza con: "Tengo un campo de selección con algunas opciones en él ..." para que no esté vacío, por lo tanto, la solución sigue siendo correcta.
pinghsien422

8
@JamesCazzetta enviar una matriz para val: .val(["Multiple2", "Multiple3"]). api.jquery.com/val/#val-value
scipilot

133
Tuve que llamar manualmente .val(x).change();para activar el evento onChange de select, parece que configurar val () no lo activa.
scipilot

16
Tenga cuidado: val () puede establecer valores que no existen en las opciones.
Daniel

429

Para seleccionar una opción con el valor 'val2':

$('.id_100 option[value=val2]').attr('selected','selected');

55
Esta es la mejor solución si el valor deseado puede o no ser una opción, y no desea realizar un cambio si no es una opción. Si usa .val()la selección e intenta elegir un valor que no está allí, deseleccionará todo.
Wally Altman

De acuerdo, esta es la opción más elegante, clara y al grano. No estoy seguro si "prop" funciona mejor en todos los casos (navegadores). Pero esto ciertamente hace la búsqueda fácil para usted.
Lee Fuller

44
Además, he usado $("select[name=foo] option[value=bar]).attr('selected','selected');que también funcionó bien para todos los navegadores que probé.
Lee Fuller

1
Me gusta esta respuesta mejor que la respuesta aceptada, porque: element.outerHTML se actualiza con esto, mientras que no con la respuesta aceptada.
HoldOffHunger

2
Vale la pena señalar que esto no funcionará si el menú desplegable de selección se ha ocultado, por lo que en mi caso estoy usando el complemento select boxit pero intento activar el cambio de cuadro de selección para que el código original con el controlador onchange para el menú desplegable aún se ejecute. Solo tengo que actualizar el código para el nuevo elemento que es el elemento selectboxit
chris c

331

Use el change()evento después de seleccionar el valor. De los documentos:

Si el campo pierde el foco sin que el contenido haya cambiado, el evento no se activa. Para desencadenar el evento manualmente, aplique .change()sin argumentos:

$("#select_id").val("val2").change();

Más información está en .change () .


22
Esto merece muchos más votos a favor y pertenece a la cima. Es la forma correcta, sin jugar con prop, attretc. y propaga todos los eventos correctamente.
Polygnome

1
Sí, esto propaga todos los eventos correctamente. En mis pruebas, "attr" funcionó la primera vez, luego todo quedó "seleccionado". Usé "prop" que cambió todo correctamente, pero no propagó eventos como (mostrar / ocultar) otros campos. Esta respuesta funcionó en todos los casos y debe considerarse correcta.
iLLin

1
Si ya tiene un oyente obligado a cambiar, esto causará un bucle infinito.
qwertzman

1
Luché un rato para intentar cambiar mi tonto valor de la lista desplegable, ¡esta solución fue la única que funcionó! ¡Gracias amigo!
AxleWack

1
Gracias. Busqué mucho antes de encontrar esta sugerencia, y esto fue lo único que funcionó. No estoy seguro de por qué no está en la cima.
Rob Santoro

58

Deseleccione todos primero y filtre las opciones seleccionables:

$('.id_100 option')
     .removeAttr('selected')
     .filter('[value=val1]')
         .attr('selected', true)

2
El valor del atributo seleccionado puede ser una cadena vacía o selected. Quiso decir .prop()?
rink.attendant.6

2
Buena respuesta. La respuesta aceptada termina con una selección vacía, cuando el valor no existe en las opciones.
Rauli Rajande

55
A LA CIMA, el mejor aquí. Para uso futuro, creo que deberíamos usar prop en lugar de attr.
Daniel

Me gusta mucho esta solución. Sin embargo, me pregunto si sería mejor, en términos de rendimiento, si el selector se cambiara a ".id_100> opción"
Hill

43
<select name="contribution_status_id" id="contribution_status_id" class="form-select">
    <option value="1">Completed</option>
    <option value="2">Pending</option>
    <option value="3">Cancelled</option>
    <option value="4">Failed</option>
    <option value="5">In Progress</option>
    <option value="6">Overdue</option>
    <option value="7">Refunded</option>

Establecer en estado pendiente por valor

   $('#contribution_status_id').val("2");

36

Para mí lo siguiente hizo el trabajo

$("div.id_100").val("val2").change();

27

Creo que la forma más fácil es seleccionar establecer val (), pero puede verificar lo siguiente. Consulte ¿Cómo manejar la etiqueta de selección y opción en jQuery? para más detalles sobre opciones.

$('div.id_100  option[value="val2"]').prop("selected", true);

$('id_100').val('val2');

No está optimizado, pero la siguiente lógica también es útil en algunos casos.

$('.id_100 option').each(function() {
    if($(this).val() == 'val2') {
        $(this).prop("selected", true);
    }
});

Prefiero este método sobre la configuración de val () directamente. También me gusta establecer el atributo: ayuda con la depuración. $ (this) .attr ("selected", "selected")
Craig Jacobs el

17

Puede seleccionar cualquier atributo y su valor utilizando el selector de atributos [attributename=optionalvalue], por lo que en su caso puede seleccionar la opción y establecer el atributo seleccionado.

$("div.id_100 > select > option[value=" + value + "]").prop("selected",true);

¿Dónde valueestá el valor que desea seleccionar?

Si necesita eliminar cualquier valor seleccionado anteriormente, como sería el caso si se usa varias veces, necesitaría cambiarlo ligeramente para eliminar primero el atributo seleccionado

$("div.id_100 option:selected").prop("selected",false);
$("div.id_100 option[value=" + value + "]")
        .prop("selected",true);

15

La mejor manera es así:

$(`#YourSelect option[value='${YourValue}']`).prop('selected', true);

En Chrome, la configuración $('<select>').val('asdf')no actualizó la selección para mostrar la opción seleccionada actualmente. Esta respuesta solucionó ese problema.
Joshua Burns

Aunque esto también funcionará, pero $ ('<select>') .val ('asdf') funciona bien en Chrome 79.0.3945.88
QMaster

14

una respuesta simple es, en html

<select name="ukuran" id="idUkuran">
    <option value="1000">pilih ukuran</option>
    <option value="11">M</option>
    <option value="12">L</option>
    <option value="13">XL</option>
</select>

en jquery, llame a la siguiente función por botón o lo que sea

$('#idUkuran').val(11).change();

es simple y funciona al 100%, porque está tomado de mi trabajo ... :) espero que sea de ayuda ...


¿Su valor predeterminado es 1000? Por qué no ""
voodoocode

2
es opcional, puede modificarlo según lo necesite .. :)
Mang Jojot

14

No hay razón para pensar demasiado, todo lo que está haciendo es acceder y establecer una propiedad. Eso es.

De acuerdo, entonces algunos dom básicos: si estuvieras haciendo esto en JavaScript directo, lo harías:

window.document.getElementById('my_stuff').selectedIndex = 4;

Pero no lo estás haciendo con JavaScript directo, lo estás haciendo con jQuery. Y en jQuery, desea utilizar la función .prop () para establecer una propiedad, por lo que lo haría así:

$("#my_stuff").prop('selectedIndex', 4);

De todos modos, solo asegúrese de que su identificación sea única. De lo contrario, se golpeará la cabeza contra la pared preguntándose por qué esto no funcionó.


12

La forma más fácil de hacerlo es:

HTML

<select name="dept">
   <option value="">Which department does this doctor belong to?</option>
   <option value="1">Orthopaedics</option>
   <option value="2">Pathology</option>
   <option value="3">ENT</option>
</select>

jQuery

$('select[name="dept"]').val('3');

Salida: Esto activará ENT .


12

Es mejor usar change()después de configurar el valor de selección.

$("div.id_100 select").val("val2").change();

Al hacer esto, el código se cerrará al cambio de selección por usuario, la explicación se incluye en JS Fiddle :

JS Fiddle


¿Por qué es esto? ¿Podrías explicar un poco?
71GA

JS Fiddle . Con un método change (), el código se cerrará al cambio de selección por usuario, mientras que hay oyentes que necesitan ser manejados durante el cambio.
Nick Tsai

12

$('#graphtype option[value=""]').prop("selected", true);

Esto funciona bien donde #graphtypeestá la identificación de la etiqueta select.

ejemplo seleccione etiqueta:

 <select name="site" id="site" class="form-control" onchange="getgraph1(this.options[this.selectedIndex].value);">
    <option value="" selected>Site</option> 
    <option value="sitea">SiteA</option>
    <option value="siteb">SiteB</option>
  </select>

8
var opt = new Option(name, id);
$("#selectboxName").append(opt);
opt.setAttribute("selected","selected");

8

Utilizar:

$("div.id_100 > select > option[value=" + value + "]").attr("selected",true);

Esto funciona para mi. Estoy usando este código para analizar un valor en un formulario de actualización de fancybox, y mi fuente completa de app.js es:

jQuery(".fancybox-btn-upd").click(function(){
    var ebid = jQuery(this).val();

    jQuery.ajax({
        type: "POST",
        url: js_base_url+"manajemen_cms/get_ebook_data",
        data: {ebookid:ebid},
        success: function(transport){
            var re = jQuery.parseJSON(transport);
            jQuery("#upd-kategori option[value="+re['kategori']+"]").attr('selected',true);
            document.getElementById("upd-nama").setAttribute('value',re['judul']);
            document.getElementById("upd-penerbit").setAttribute('value',re['penerbit']);
            document.getElementById("upd-tahun").setAttribute('value',re['terbit']);
            document.getElementById("upd-halaman").setAttribute('value',re['halaman']);
            document.getElementById("upd-bahasa").setAttribute('value',re['bahasa']);

            var content = jQuery("#fancybox-form-upd").html();
            jQuery.fancybox({
                type: 'ajax',
                prevEffect: 'none',
                nextEffect: 'none',
                closeBtn: true,
                content: content,
                helpers: {
                    title: {
                        type: 'inside'
                    }
                }
            });
        }
    });
});

Y mi código PHP es:

function get_ebook_data()
{
    $ebkid = $this->input->post('ebookid');
    $rs = $this->mod_manajemen->get_ebook_detail($ebkid);
    $hasil['id'] = $ebkid;
    foreach ($rs as $row) {
        $hasil['judul'] = $row->ebook_judul;
        $hasil['kategori'] = $row->ebook_cat_id;
        $hasil['penerbit'] = $row->ebook_penerbit;
        $hasil['terbit'] = $row->ebook_terbit;
        $hasil['halaman'] = $row->ebook_halaman;
        $hasil['bahasa'] = $row->ebook_bahasa;
        $hasil['format'] = $row->ebook_format;
    }
    $this->output->set_output(json_encode($hasil));
}

7

.attr () a veces no funciona en versiones anteriores de jQuery, pero puede usar .prop () :

$('select#ddlCountry option').each(function () {
    if ($(this).text().toLowerCase() == co.toLowerCase()) {
        $(this).prop('selected','selected');
        return;
    }
});

4

Esto funciona con seguridad para Select Control :

$('select#ddlCountry option').each(function () {
if ($(this).text().toLowerCase() == co.toLowerCase()) {
    this.selected = true;
    return;
} });


4

Enlace fuente ingrese la descripción de la imagen aquí

Utilice el método val () jQuery para la selección de valores únicos y múltiples en DropDown

    $(function () {

        $("button").click(function () {
            $("#myDropDownSingle").val('5');
            $("#myDropDownMultiple").val(['5', '4', '8']);
        });

    });

HTML

<p>
    <h5>Single Selection</h5>
    <select id="myDropDownSingle" class="form-control">
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>
</p>
<p>
    <h5>Multiple Selection</h5>
    <select id="myDropDownMultiple" class="form-control" multiple>
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>
</p>

<p>
    <button>Get Value and Text on Button Click</button>
</p>

3

Prueba esto. Simple pero efectivo javaScript + jQuery el combo letal.

Seleccionar componente:

<select id="YourSelectComponentID">
            <option value="0">Apple</option>
            <option value="2">Banana</option>
            <option value="3">Cat</option>
            <option value="4">Dolphin</option>
</select>

Selección:

document.getElementById("YourSelectComponentID").value = 4;

Ahora su opción 4 será seleccionada. Puede hacer esto para seleccionar los valores al inicio de forma predeterminada.

$(function(){
   document.getElementById("YourSelectComponentID").value = 4;
});

o cree una función simple, coloque la línea y llame a la función en cualquier evento para seleccionar la opción

Una mezcla de jQuery + javaScript hace la magia ...


3

Es una publicación anterior, pero aquí hay una función simple que actúa como el complemento jQuery.

    $.fn.selectOption = function(val){
        this.val(val)
        .find('option')
        .removeAttr('selected')
        .parent()
        .find('option[value="'+ val +'"]')
        .attr('selected', 'selected')
        .parent()
        .trigger('change');

        return this;
    };

Simplemente puede hacer algo como esto:

$('.id_100').selectOption('val2');

Reson por qué usar esto es porque cambias el tiempo seleccionado seleccionado a DOM, lo que es compatible con crossbrowser y también activará el cambio para que puedas atraparlo.

Es básicamente una simulación de acción humana.


2
  • Debe tener en cuenta que el valor que desea cambiar dinámicamente, debe ser el mismo que uno presente en las opciones que define en su HTML tal como está case sensative. Puede cambiar su cuadro de selección dinámicamente de la siguiente manera,

$("div#YOUR_ID").val(VALUE_CHANGED).change(); //value must present in options you selected otherwise it will not work


1

Parece haber un problema con los controles desplegables de selección que no cambian dinámicamente cuando los controles se crean dinámicamente en lugar de estar en una página HTML estática.

En jQuery esta solución funcionó para mí.

$('#editAddMake').val(result.data.make_id);
$('#editAddMake').selectmenu('refresh');

Al igual que un apéndice, la primera línea de código sin la segunda línea, en realidad funcionó de manera transparente en eso, recuperar el índice seleccionado fue correcto después de configurar el índice y si realmente hizo clic en el control, mostraría el elemento correcto, pero esto no se reflejó en la etiqueta superior del control.

Espero que esto ayude.


0

Un problema que encontré cuando el valor es una ID y el texto es un código. No puede establecer el valor utilizando el código, pero no tiene acceso directo a la ID.

var value;

$("#selectorId > option").each(function () {
  if ("SOMECODE" === $(this).text()) {
    value = $(this).val();
  }
});

//Do work here


-1

Esto funciona bien

jQuery('.id_100').change(function(){ 
        var value = jQuery('.id_100').val(); //it gets you the value of selected option 
        console.log(value); // you can see your sected values in console, Eg 1,2,3
    });
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.