2012-03-21 30 views
8

¿Es posible detectar si no se seleccionó explícitamente una opción en un cuadro de selección?jQuery: cómo comprobar si NO se seleccionó explícitamente ninguna opción en un cuadro de selección

me han tratado estos métodos, pero ninguno de ellos funciona:

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

Prueba 1:

alert($('#select option:selected').length); // returns 1 

Ensayo 2:

alert($('#select option[selected=selected]').length); // returns 1 

Prueba 3:

alert($('#select option:selected').attr('selected')); // returns 'selected' 

¿Alguna idea SO personas?

+0

Siempre tendrá una opción seleccionada porque de manera predeterminada siempre seleccionará el primer elemento en la carga de la página. Necesita agregar un '' y probar si el valor está vacío. – Ohgodwhy

+0

@Ohgodwhy Prefijo un al cuadro de selección en el tiempo de ejecución. Pero nunca pasa por ': seleccionado'. ¿JQuery ': selected' no considera las opciones añadidas dinámicamente? – craftsman

+1

Usted asume correctamente. Prefijo lo agrega DESPUÉS de la carga dom, por lo que el primer elemento seleccionado será el primero que estuvo en el momento de la carga del DOM. – Ohgodwhy

Respuesta

20

intenta esto:

<select id="mySelect"> 
    <option value="1">First</option> 
    <option value="2">Second</option> 
    <option value="3">Third</option> 
    <option value="4">Fourth</option> 
</select><input type="button" id="btncheck" value="check"/> 

Utilice esta JS:

$('#btncheck').click(function(){ 
    if ($("#mySelect ")[0].selectedIndex <= 0) { 
       alert("Not selected"); 
      } 
    else 
     alert("Selected"); 
}); 

Verificará si se seleccionó su menú desplegable.

probar este violín: http://jsfiddle.net/aPYyt/

espero que ayude!

PD: Tendrá que hacer que primer valor como valor predeterminado.

+0

+1 ¡Genial! Es exactamente lo que quería. – craftsman

+1

Quizás sea relevante agregar que la propiedad selectedIndex devuelve '-1' cuando no se selecciona nada: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Property/selectedIndex – Daan

+0

RE: -1 value cuando no se selecciona nada, eso NO es lo que veo en Chrome o Firefox. Veo un valor de retorno de 0 cuando no se selecciona nada. –

3

Un cuadro de selección siempre tiene un valor. Si no cambia manualmente el valor predeterminado, aún tiene un valor. Para la comprobación de explícitas cambios, como usted dice, se podría monitorear change:

$('#select').change(function() { $(this).data('changed', true); }); 

su condición, entonces, sería:

if(!!$('#select').data('changed')) { ... } 

La forma más común de lograr algo similar sería insertar un valor de marcador de posición en la parte superior:

<option value="0">Please select one item</option> 

... y prueba para

$('#select').val() == '0' 

Si necesita saber si la selección se ha cambiado desde su valor original, es decir, la prueba anterior, pero asegurándose de que el usuario no vuelva a la configuración predeterminada, simplemente puede almacenar el valor original en la página de carga:

$('#select').data('original-value', $('#select').val()); 

y compruebe si hay

$('#select').val() != $('#select').data('original-value'); 
5

Así es como funciona normal elemento select : la primera opción se selecciona si no hay otra opción tiene selected conjunto de atributos. La solución más sencilla es añadir una opción vacío como la primera opción, así:

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

En jQuery puede probar una de estas condiciones:

$("#mySelect").val() === ""; 
$("#mySelect option:selected").index() == 0; 
$("#mySelect option:first:selected").length != 0; 
+0

esta opción ayudó a '$ (" # mySelect option: selected "). index() == 0' con una ligera variación en mi caso particular '$ (" # mySelect opción: seleccionado "). Index() <= 0' ¡Hermoso! – Irfan

0

Por defecto cualquier opción que viene en el índice 0 es considerado por el navegador como seleccionado.La solución al problema sería la inserción de una opción de maniquí en el índice 0 y antes de enviar el formulario se puede validar que usar algo como

if($("#selectBox option").index("option:selected")>0) $("#myForm").submit();

0
var $inputs_select_options = $('option:selected');  

// remove empty(first option as default , value=="") options: 
$inputs_select_options = $inputs_select_options.filter(function() { 
    return this.value.length; //check by length value 
}); 
Cuestiones relacionadas