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/

w00
fuente
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 .

pinghsien422
fuente
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');
Kirill Ivlev
fuente
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 () .

jitendrapurohit
fuente
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)
tonto
fuente
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");
Desarrollador
fuente
36

Para mí lo siguiente hizo el trabajo

$("div.id_100").val("val2").change();
Taran
fuente
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);
    }
});
Dipu
fuente
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);
Runa FS
fuente
15

La mejor manera es así:

$(`#YourSelect option[value='${YourValue}']`).prop('selected', true);
Daniel Carpio Contreras
fuente
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 ...

Mang Jojot
fuente
¿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ó.

Itzjak
fuente
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 .

Pran
fuente
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

Nick Tsai
fuente
¿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>
LOKENDRA
fuente
8
var opt = new Option(name, id);
$("#selectboxName").append(opt);
opt.setAttribute("selected","selected");
Ravi Wadje
fuente
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));
}
Adityo
fuente
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;
    }
});
Shujaath Khan
fuente
4

Esto funciona con seguridad para Select Control :

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

Solo pon este código:

$("#Controls_ID").val(value);
Osama khodrog
fuente
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>
Code Spy
fuente
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 ...

Majid Ali Khan
fuente
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.

Ivijan Stefan Stipić
fuente
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

Shahrukh Anwar
fuente
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.

usuario2288580
fuente
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
Ryan
fuente
0

esto funciona para mi

$("#id_100").val("val2");
user9972736
fuente
-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
    });
Mohammed Muzammil
fuente