jquery validate: focusCleanup: true y focusInvalid: false no funciona como se esperaba

Estoy usando el plugin de validación jquery de Joern 1.6.

Mi objective es tener el siguiente comportamiento: eliminar el mensaje de error de un elemento una vez que el usuario lo enfoca. Por lo que entiendo, configurar ‘focusCleanup: true’ debería encargarse de esto.

Sin embargo (al menos en mi navegador (Firefox 3.5.7 en Linux)), solo obtengo el comportamiento deseado (es decir, el mensaje de error de un campo que desaparece una vez que lo enfoca) si hago clic en el campo; no maneja tabular en el campo correctamente.

Código de muestra:

HTML:

     

JS:

  $("#abc").validate({ focusCleanup: true, focusInvalid: false, rules: {t1: {required: true, email:true}, t2: {required: true,email:true}} }); 

Estoy configurando ‘focusInvalid: false’ porque los documentos dicen que uno debe evitar combinar focusCleanup y focusInvalid; En mi experiencia, comentar esa línea no hace ninguna diferencia.

¿Estoy haciendo algo mal?

Lo que estás experimentando es el comportamiento correcto, quizás un poco contraintuitivo. Puedes ver tu código en una demo aquí . Cuando hace clic, solo está enfocando el cuadro de texto, sin embargo, cuando está en la pestaña está causando 2 eventos que son importantes, está activando tanto el focusin como el keyup .

Ya que está activando el keyup lo que está sucediendo es que está eliminando el error, pero porque está escribiendo algo en el cuadro (no distingue la pestaña de ninguna otra tecla, como una letra) … pero luego vuelve a aparecer. evaluando si la casilla es válida en cada keyup , mostrando el mismo error que antes, ya que la pestaña no tuvo ningún efecto en eso … ya que no agregó ningún texto.

Si quieres deshabilitar la validación en onkeyup , dejará de hacerlo, así:

 $("#abc").validate({ focusCleanup: true, rules: {t1: {required: true, email:true}, t2: {required: true,email:true}}, onkeyup: false, });​ 

A modo de comparación, aquí está ese código en una demostración , por lo que puede compararlo con la demostración original anterior.