2008-09-29 11 views
200

Usando jQuery, cómo verifica si hay una opción seleccionada en un menú de selección, y si no, asigne una de las opciones seleccionadas.Compruebe si se selecciona la opción con jQuery; si no, seleccione una configuración predeterminada

(El selecto se genera con un laberinto de funciones PHP en una aplicación que acabo de heredar, por lo que esta es una solución rápida, mientras que consigo mi cabeza alrededor de los :)

+1

http://api.jquery.com/selected-selector/ –

Respuesta

261

Aunque no estoy seguro de exactamente lo que quiere lograr, este fragmento de código trabajó para mí.

<select id="mySelect" multiple="multiple"> 
    <option value="1">First</option> 
    <option value="2">Second</option> 
    <option value="3">Third</option> 
    <option value="4">Fourth</option> 
</select> 

<script type="text/javascript"> 
$(document).ready(function() { 
    if (!$("#mySelect option:selected").length) { 
    $("#mySelect option[value='3']").attr('selected', 'selected'); 
    } 
}); 
</script> 
+85

La selección sería más fácil de leer así: '$ (" # mySelect "). Val (3);' –

+6

Esto me puso en el camino correcto, pero necesitaba hacer esto: '$ (" # mySelect opción ") [2] ['selected'] = true;' Lo descubrí después de investigar las estructuras de objeto en Firebug. – semperos

+28

A partir de jQuery 1.6, puede establecer la propiedad directamente. '$ (" # mySelect ").prop ("selectedIndex", 2) ' – gradbot

2

Mira el selectedIndex del elemento select. Por cierto, eso es una simple cosa DOM, no específica de JQuery.

29

No hay necesidad de usar jQuery para esto:

var foo = document.getElementById('yourSelect'); 
if (foo) 
{ 
    if (foo.selectedIndex != null) 
    { 
     foo.selectedIndex = 0; 
    } 
} 
+57

El PO declaró, "Uso de jQuery ..." por lo que parece superfluo hacer caso omiso de eso, no? – BryanH

+14

A veces, jQuery no es la herramienta adecuada. – gradbot

+13

Personalmente, si hago una pregunta específica, me gustaría obtener la respuesta para la pregunta en lugar de una forma diferente. – vitto

11

lencioni's answer es lo que yo recomendaría. Puede cambiar el selector de la opción ('#mySelect option:last') para seleccionar la opción con un valor específico usando "#mySelect option[value='yourDefaultValue']". More on selectors.

Si trabaja extensamente con listas de selección en el cliente, revise este plugin: http://www.texotela.co.uk/code/jquery/select/. Eche un vistazo a la fuente si desea ver más ejemplos de cómo trabajar con listas de selección.

3

ya me encontré con el texotela plugin mencionado, lo cual me permitió resolver de esta manera:

$(document).ready(function(){ 
    if ($("#context").selectedValues() == false) { 
    $("#context").selectOptions("71"); 
    } 
}); 
9

Aquí está cambiando mi función de la opción seleccionada. Funciona para jQuery 1.3.2

function selectOption(select_id, option_val) { 
    $('#'+select_id+' option:selected').removeAttr('selected'); 
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected'); 
} 
2

Ésta era una escritura rápida que encontré que trabajó ... .Result se asigna a una etiqueta.

$(".Result").html($("option:selected").text()); 
1

Ustedes están haciendo demasiado para elegir. Simplemente seleccione por valor:

$("#mySelect").val(3); 
+2

Esto está seleccionando la opción 3 independientemente de si ya está seleccionada otra opción. –

3

Easy! El valor predeterminado debe ser la primera opción. ¡Hecho! Eso lo llevaría a Javascript no intrusivo, ya que no es necesario JavaScript :)

Unobtrusive JavaScript

7
<script type="text/javascript"> 
$(document).ready(function() { 
    if (!$("#mySelect option:selected").length) 
    $("#mySelect").val(3); 

}); 
</script> 
0
$("option[value*='2']").attr('selected', 'selected'); 
// 2 for example, add * for every option 
0
$("#select_box_id").children()[1].selected 

Esta es otra manera de comprobar una opción está seleccionada o no en jQuery. Esto devolverá Boolean (verdadero o falso).

[1] es el índice de la opción de selección de cuadro

1
if (!$("#select").find("option:selected").length){ 
    // 
} 
12

Esta pregunta es antiguo y tiene una gran cantidad de puntos de vista, así que voy a tirar algunas cosas por ahí que va a ayudar a algunas personas que estoy seguro .

Para comprobar si un elemento de selección tiene ningún artículo seleccionados:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); } 

o para comprobar si un selecto tiene nada seleccionado:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); } 

o si usted está en un bucle de algún tipo y desea comprobar si el elemento actual está seleccionado:

$('#mySelect option').each(function() { 
    if ($(this).is(':selected')) { .. } 
}); 

para comprobar si un elemento no está seleccionado mientras está en un bucle:

$('#mySelect option').each(function() { 
    if ($(this).not(':selected')) { .. } 
}); 

Estas son algunas de las formas de hacerlo. jQuery tiene muchas formas diferentes de lograr lo mismo, por lo que generalmente solo eliges cuál parece ser la más eficiente.

+0

"no" no funcionó para mí $ ('# opción mySelect'). Cada (función() { if ($ (this) .not (': seleccionado')) {..} }); Así que se usa una negación activada como si (! $ (This) .is (': selected')) {..} Navegador: Chrome; Versión de Jquery: 3.1.1 – Anilkumar

0

evento de cambio en el cuadro de selección al fuego y una vez que lo hace entonces simplemente tirar el atributo id de la opción seleccionada: -

$("#type").change(function(){ 
    var id = $(this).find("option:selected").attr("id"); 

    switch (id){ 
    case "trade_buy_max": 
     // do something here 
     break; 
    } 
}); 
0

Yo estaba buscando algo similar y se encontró lo siguiente:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true); 

Esto encuentra todos los menús de selección de la clase que aún no tienen una opción seleccionada, y selecciona la opción predeterminada ("2" en este caso).

He intentado utilizar :selected en lugar de [selected], pero eso no funcionó, porque siempre hay algo que se ha seleccionado, incluso si no tiene el atributo

1

he encontrado una buena manera de comprobar, si se selecciona la opción y seleccione un valor predeterminado cuando no lo es

if(!$('#some_select option[selected="selected"]').val()) { 
     //here code if it HAS NOT selected value 
     //for exaple adding the first value as "placeholder" 
     $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>'); 
    } 

Si #some_select opción seleccionada por defecto has't continuación .val() es indefinido

0

Si es necesario comprobar de forma explícita cada opción para ver si alguno tienen el "seleccionado" atributo puedes hacer esto. De lo contrario, utilizando option:selected obtendrá el valor de la primera opción predeterminada.

var viewport_selected = false;  
$('#viewport option').each(function() { 
    if ($(this).attr("selected") == "selected") { 
     viewport_selected = true; 
    } 
}); 
Cuestiones relacionadas