2012-01-18 20 views
23

Tengo 3 divs, cada uno con un campo de entrada de pocos dígitos y el siguiente botón activado. Quiero escribir un fragmento de jQuery que cuando se hace clic en el botón siguiente comprueba para asegurarse de que todos los campos de entrada DENTRO del mismo div como el botón, no son nulos.Verificar que todos los campos de entrada se hayan completado con jQuery

He intentado lo siguiente sin suerte, pero estoy 100% seguro de que su mal, sólo yo puedo encontrar la información relevante en línea ...

http://jsfiddle.net/xG2KS/1/

Respuesta

52

Se podría utilizar para reducir filter el conjunto de todos los elementos input a sólo aquellos que están vacíos, y compruebe la propiedad length de lo que queda:

$(".next").click(function() { 
    var empty = $(this).parent().find("input").filter(function() { 
     return this.value === ""; 
    }); 
    if(empty.length) { 
     //At least one input is empty 
    } 
}); 

Tenga en cuenta que la definición de vacío en el código anterior es una cadena vacía. Si desea tratar los espacios en blanco como vacíos también, es posible que desee recortar el valor antes de comparar.

También tenga en cuenta que no es necesario pasar this a jQuery dentro de la función filter. El elemento DOM en sí tendrá una propiedad value, y es mucho más rápido acceder a eso en lugar de usar val.

Aquí hay un updated fiddle.

+1

¡Ahh brillante, gracias! – Liam

+0

No hay problema, me alegro de poder ayudar :) –

+0

¿Cómo se puede usar esto con un formulario con texto de entrada y seleccionar? –

6
$('.next').click(function() { 
    var emptyInputs = $(this).parent().find('input[type="text"]').filter(function() { return $(this).val() == ""; }); 
    if (emptyInputs.length) { 
     alert('Fail!'); 
    } 
}); 
+0

Gracias @garvey !, ¿hay alguna manera de decir, si CUALQUIER entrada está vacía, lanzar una alerta como opuesta a un bucle? – Liam

+0

Sí, ver mis ediciones. Sin lazo – pltvs

+0

¿Cómo puedo seleccionar? –

0
$('.next').click(function() { 
    var inputs = $(this).parent().find('input[value=""]'); 
    if (!inputs.length) { 
     // you have empty fields if this section is reached 
    } 
}); 
+0

Esto dirá que hay entradas vacías incluso si no hay ninguna, porque mira el atributo 'value' * en lugar de la propiedad. –

+0

No sigo? Como no soy tan versado en jQuery como debería ser, ¿te importaría explicarlo? –

+3

Has usado un selector de atributos para encontrar elementos cuyo atributo 'value' sea igual a la cadena vacía. El atributo 'value' * es lo que se define en el elemento en sí:' '. Como ninguno de los elementos 'input' en cuestión tiene un atributo' value', tu código siempre dirá que están todos vacíos. –

Cuestiones relacionadas