2012-04-11 29 views
40

Existe la opción focusInvalid, que es true de forma predeterminada. Pero funciona solo cuando se produce el envío del formulario. Si valido el formulario con el método valid, entonces no funciona. Entonces, la pregunta es ¿cómo enfocar el campo inválido cuando se usa valid?Cómo enfocar campos inválidos con jQuery validate?

Consulte this demo para ver la diferencia. Simplemente presione los botones allí.

+1

@Evan, ¿no te gusta jsbin? También puede modificar eso: http://jsbin.com/ayupob/edit#javascript,html –

Respuesta

40

Primero de todo lo que necesita para guardar su validador a una variable para que pueda utilizarlo en el controlador de clic:

var validator = $("#test-form").validate({ /* settings */ }); 

A continuación, en el controlador de validación, puede llamar manualmente la función focusInvalid de la variable validator :

$("#validate").click(function() { 
     if ($("#test-form").valid()) 
       alert("Valid!"); 
     else 
       validator.focusInvalid(); 

     return false; 
    }); 

Example

49

con la invalidHandler se puede establecer el foco en el primer elem ent que falla:

$("#form").validate({ 
    onfocusout: false, 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) {      
      validator.errorList[0].element.focus(); 
     } 
    } 
}); 
+3

jQuery validate selecciona el primer elemento no válido ** o el último elemento no válido enfocado **. Tu código es el único que he encontrado que evita esta molestia y siempre selecciona el primero. ¡Gracias! –

+2

Sí, hay muchos problemas que afectan a jquery. Valida el manejo del foco. Por sí solo funciona como una parte superior, pero cuando comienzas a agregar diseños receptivos y más scripts de jquery, el enfoque puede ser un tanto desalentador. Buena secuencia de comandos, gracias por publicarlo. –

+0

+1 para esta opción, no pude encontrarlo en ningún lado. Por cierto, un pequeño consejo: también haga 'validator.lastActive = validator.errorList [0] .element;' para evitar enfocarse en dos elementos ... esto fue algo que tuve que enfrentar con el campo 'end date' como último activo y' start date' como primer campo no válido, los fechadores aparecieron en ambos campos (por supuesto, ambos no eran válidos). ¡¡Aclamaciones!! – Fr0zenFyr

Cuestiones relacionadas