2011-03-09 13 views
20

En HTML 5, podemos marcar las entradas como required y luego seleccionarlas con el pseudo selector [required] en CSS. Pero solo quiero diseñarlos cuando intenten enviar el formulario sin completar un elemento obligatorio. ¿Hay un selector para esto? ¿Qué tal el pequeño cuadro de mensaje que aparece?HTML5 Estilo de entrada requerido

+1

No. Eso requiere Javascript. – SLaks

+0

@SLaks: ¿Cuál es el punto, entonces? Funciona todo el tiempo que desee el estilo predeterminado? – Xodarap

+0

Consulte esta pregunta para obtener más información http://stackoverflow.com/questions/5660177/styling-the-hint-on-a-html5-input-field-using-required-attribute – alpha1

Respuesta

4

Sí, ya que SLaks dijo que no hay un selector de CSS para hacer esto. Dudo que esto esté dentro del alcance de CSS porque CSS debería verificar el contenido de una entrada.

Su mejor opción, sin embargo, es probablemente llamar a una función de validación de JavaScript al hacer clic en un botón, en lugar de enviar el formulario. A continuación, comprobar los campos [requerido] de contenidos adecuados y, o bien enviar el formulario o resaltar los campos obligatorios que no fueron llenadas en.

jQuery tiene algunos plugins agradable que se ocupan de esto para usted http://docs.jquery.com/Plugins/validation

26

Puede use: selectores válidos y no válidos. Algo como esto

.field:valid { 
    border-color:#0f0; 
} 
.field:invalid { 
    border-color:#f00; 
} 

Sin embargo, esto sólo funcionará en los navegadores que soportan la validación nativa, y sólo para los campos que tengan sentido. Por lo que sé, en este momento eso solo significa Chrome (tal vez Safari, pero no lo haya verificado).

Por validación nativa me refiero a que en cromo si haces <input type="email"> el valor del campo será validado para el tipo de cadena de correo electrónico (sin javascript adicional), por lo que los estilos anteriores funcionarán. Sin embargo, si los adjuntara a un campo type="text", o un segundo campo de contraseña (que se supone que coincida con el primero), solo se pondría verde porque todo es válido, y en el caso de la contraseña, no hay " escribe "para eso de todos modos.

Lo que básicamente significa que para admitir todos los navegadores y, lo que es más importante, una gama más amplia de validaciones, debe recurrir a javascript, en cuyo caso asignar clases .valid/.invalid no debería ser un problema. :)

+0

Me parece que estos están configurados en carga de la página, así que tengo el mismo problema que con '[required]'. – Xodarap

+0

@ Xodarap, está configurado en carga de página, pero la entrada cambia de válida a inválida, por lo que funcionará perfectamente. – Johan

+0

@Johan haciendo esto cambia el estilo solo cuando la entrada cambia entre (in) válido. No como Xodarp quiere, lo que requiere que el estilo le suceda a todas las otras cajas solo después de hacer clic en ... – will

12

He recurrido al uso de JS para aplicar una clase de .validated a la forma de presentar, a continuación, utilizar esa clase de estilo: fields.eg válido:

.validated input:invalid { ... }

esta manera campos no aparecer como no válido en la carga de la página, solo después de enviar el formulario. Idealmente, habría una clase pseodo aplicada al formulario en el envío.

+0

También podría hacer algo como esto para permitir la verificación de validación en tiempo real: '$ ('input [required]') .on 'keyup', -> $ (this) .addClass ('validate-me'). off ('keyup') ' y luego agregue estilos CSS para' input [required] .validate-me: invalid' etc. – Jayphen

+0

@Toby: suave, +1! –

2

Hay una pseudoclass :user-error en el CSS Selectors 4 working draft que hará exactamente esto, disparando tanto el desenfoque de entrada como el envío de formulario.

Mientras tanto, estoy usando personalmente el increíble webshims polyfill library que cubre: error del usuario, o podría hackearlo usted mismo con algo similar a la respuesta de Toby.

2
input:required { 
    /* Style your required field */ 
    /* Be sure to style it as an individual field rather than just add your desired styles 
    for a required field. */ 
} 

Probado y probado en cromo. No lo he probado en ningún otro navegador.

+0

¡Esta es la mejor respuesta! –

1

Esta solución le dará un estilo a los campos de entrada que se requieren mediante el atributo , mientras que en blanco. Los navegadores eliminarán la pseudoclase inválida al rellenar un campo obligatorio en el teclado. Las versiones recientes de Firefox aplican automáticamente algo similar a este estilo, pero Chrome y IE no lo hacen.

input[required]:invalid { box-shadow: 0 0 3px 1px red } 

Inténtelo: http://jsfiddle.net/2Ph2X/

Cuestiones relacionadas