2011-11-27 9 views
17

Estoy tratando de usar la validación HTML5 del lado del cliente fuera de un contexto de formulario/envío, pero no puedo ver cómo mostrar las burbujas de error de validación. Considere lo siguiente:¿Cómo mostrar programáticamente las burbujas de error de validación del lado del cliente de HTML5?

<input type="text" id="input" pattern="[0-9]" required oninvalid="alert('yes, invalid')"> 
<button onclick="alert(document.getElementById('input').checkValidity())">Check</button> 

Todo funciona como se esperaba, con el valor correcto de ser devuelto a checkValidity, y el evento no válido se envía y se muestra, pero ¿cómo puedo mostrar mediante programación la burbuja de error de validación?

Respuesta

5

Si estamos hablando de esta burbuja: comentario

Validation bubble in Firefox

Sede de ScottR a esta respuesta en su lugar.

... entonces mi prueba muestra que tanto Firefox y Chrome muestran que cuando se llama a checkValidity en un elemento envuelto en una forma <> ( testcase), pero no en un elemento independiente ( testcase).

No parece ser un mecanismo para mostrarlo cuando no hay forma, y ​​la especificación doesn't even say tiene que ser visualizado en respuesta a programáticas checkValidity llamadas (en el elemento o formulario) - sólo cuando la presentación de una formar.

Así que por ahora, envuelva sus elementos en un formulario, incluso si realmente no lo va a enviar.

Mejor aún, utilice su propia IU de validación, esto lo protegerá de futuros cambios en los navegadores en este área no especificada.

+0

Gracias. Me parece que las burbujas ** no ** se muestran cuando se invoca checkValidity, ya sea en elemento o en forma; parece que solo se muestran cuando se envía el formulario, tal vez junto con el evento onsubmit (puede devolver false del controlador para evitar que el evento se envíe). –

+4

Esta respuesta aceptada no es correcta. Chrome 19, 20 y 21 no muestran las burbujas de validación al llamar a 'element.checkValidity()'; el primer elemento con un error tiene ese error en una burbuja cuando un usuario hace clic en un botón que envía el formulario. –

+0

@ScottR: vea el caso de prueba en la respuesta modificada. No estoy seguro de por qué piensas que la respuesta no es correcta. – Nickolay

-1

Simplemente configure manualmente el atributo "no válido" en los campos incorrectos. pequeño ejemplo:

var form = $('#myForm').get(0); 
if(typeof formItem.checkValidity != 'undefined' && !formItem.checkValidity()) { 
    $('input:required').each(function(cnt, item) { 
     if(!$(item).val()) { 
      $(item).attr('invalid', 'invalid'); 
     } 
    }); 
    return false; 
} 
Cuestiones relacionadas