Cuando se utilizan los navegadores más nuevos que admiten HTML5 (FireFox 4, por ejemplo);
y un campo de formulario tiene el atributo required='required'
;
y el campo del formulario está vacío / en blanco;
y se hace clic en el botón de enviar;
los navegadores detectan que el campo "requerido" está vacío y no envía el formulario;
en cambio, el navegador muestra una pista pidiéndole al usuario que escriba texto en el campo.
Ahora, en lugar de un solo campo de texto, tengo un grupo de casillas de verificación , de las cuales el usuario debe marcar / seleccionar al menos una.
¿Cómo puedo usar el required
atributo HTML5 en este grupo de casillas de verificación? (Dado que solo una de las casillas de verificación debe estar marcada, no puedo poner el required
atributo en cada casilla de verificación)
PD. Estoy usando simple_form , si eso importa.
ACTUALIZAR
¿Podría ser útil el atributo HTML 5multiple
aquí? ¿Alguien lo ha usado antes para hacer algo similar a mi pregunta?
ACTUALIZAR
Se parece que esta característica no es compatible con la especificación HTML 5: NÚMERO-111: Lo que hace de entrada @ requiere media para @type = casilla de verificación.?
(Estado del problema: el problema se ha marcado cerrado sin perjuicio ) . Y aquí está la explicación .
ACTUALIZACIÓN 2
Es una pregunta antigua, pero quería aclarar que la intención original de la pregunta era poder hacer lo anterior sin usar Javascript, es decir, usar una forma HTML5 de hacerlo. En retrospectiva, debería haber hecho el "sin Javascript" más obvio.
fuente
Respuestas:
Lamentablemente, HTML5 no proporciona una forma inmediata de hacerlo.
Sin embargo, con jQuery, puede controlar fácilmente si un grupo de casillas de verificación tiene al menos un elemento marcado.
Considere el siguiente fragmento de DOM:
Puedes usar esta expresión:
que regresa
true
si al menos un elemento está marcado. En base a eso, puede implementar su verificación de validación.fuente
Es un simple truco. Este es un código jQuery que puede explotar la validación html5 cambiando las
required
propiedades si se marca alguna. El siguiente es su código html (asegúrese de agregar el requerido para todos los elementos en el grupo).El siguiente es el script jQuery, que desactiva la verificación de validación adicional si se selecciona alguno. Seleccione usando el elemento de nombre.
Pequeño problema aquí: dado que está utilizando la validación html5, asegúrese de ejecutar esto antes de que se valide, es decir, antes de enviar el formulario.
fuente
Supongo que no hay una forma HTML5 estándar de hacer esto, pero si no le importa usar una biblioteca jQuery, he podido lograr una validación de "grupo de casillas de verificación" utilizando la función de validación " requerida por el grupo " de webshims :
Los documentos para grupo requerido dicen:
Y aquí hay un ejemplo de cómo lo usarías:
Principalmente uso webshims para rellenar funciones HTML5, pero también tiene algunas extensiones opcionales geniales como esta.
Incluso le permite escribir sus propias reglas de validez personalizadas. Por ejemplo, necesitaba crear un grupo de casillas de verificación que no se basara en el nombre de la entrada, así que escribí mi propia regla de validez para eso ...
fuente
HTML5 no admite directamente que se requiera solo una / al menos una casilla de verificación en un grupo de casilla de verificación. Aquí está mi solución usando Javascript:
HTML
JAVASCRIPT
El javascript asegurará que al menos una casilla de verificación esté marcada, luego eliminará la necesidad de todo el grupo de casillas de verificación. Si la casilla de verificación que está marcada no está marcada, ¡requerirá todas las casillas de verificación nuevamente!
fuente
Tuve el mismo problema y mi solución fue esta:
HTML:
JS:
https://jsfiddle.net/oywLo5z4/
fuente
Inspirado por las respuestas de @thegauraw y @Brian Woodward, aquí hay un poco que reuní para los usuarios de JQuery, incluido un mensaje de error de validación personalizado:
Tenga en cuenta que mi formulario tiene algunas casillas marcadas de forma predeterminada.
¿Quizás algunos de ustedes magos de JavaScript / JQuery podrían reforzar eso aún más?
fuente
podemos hacer esto fácilmente con html5 también, solo necesitamos agregar un código jquery
Manifestación
HTML
Jquery
fuente
Agregué una radio invisible a un grupo de casillas de verificación. Cuando al menos una opción está marcada, la radio también está configurada para verificar. Cuando se cancelan todas las opciones, la radio también se configura para cancelar. Por lo tanto, el formulario utiliza el mensaje de radio "Marque al menos una opción"
display: none
porque la radio no se puede enfocar.HTML
Javascript
CSS
https://jsfiddle.net/codus/q6ngpjyc/9/
fuente
radio
'sopacity
en 0, y estableceropacity
en 1 cuando se envía, para que podamos controlar si el contorno rojo aparece o no.visibility: hidden
odisplay: none
solo para evitar ensuciar un poco la usabilidad. Porque los lectores de pantalla y otras herramientas de accesibilidad probablemente encontrarán el botón de radio oculto.Hola, solo use un cuadro de texto adicional al grupo de la casilla de verificación. Al hacer clic en cualquier casilla de verificación, coloque los valores en ese cuadro de texto. Haga que ese cuadro de texto sea obligatorio y de solo lectura.
fuente
Me doy cuenta de que hay un montón de soluciones aquí, pero descubrí que ninguna de ellas cumple con todos los requisitos que tenía:
name
al enviar problemas de Github a través de su API, y estaba usando el nombrelabel[]
para asignar etiquetas en muchos campos de formulario (dos listas de casillas de verificación y algunas selecciones y cuadros de texto), dado que podría haber logrado esto sin que compartieran el mismo nombre, pero decidí probarlo y funcionó.El único requisito para este es jQuery. Puede combinar esto con la excelente solución de @ewall para agregar mensajes de error de validación personalizados.
fuente
¡Aquí hay otro truco simple con Jquery!
HTML
JQuery
Eso es todo ... esto funciona porque si ninguna de las casillas de verificación está seleccionada, nada en lo que respecta al grupo de casillas de verificación (incluido su nombre) se publica en el servidor
fuente
Tratar:
o
Más específicamente:
Cuando esté leyendo datos de la matriz de casillas de verificación, asegúrese de que la matriz tenga:
En este caso:
fuente