javascript - formulario - required html
Omitir el atributo HTML "requerido" al enviar (4)
Esta pregunta ya tiene una respuesta aquí:
- Atributo requerido HTML5 8 respuestas
Yo uso el required
de un primer cheque antes de enviar un formulario.
<form action="myform.php">
Foo: <input type="text" name="someField" required="required">
<input type="submit" value="submit">
<input type="submit" value="ignore">
</form>
El problema es que tengo un botón "ignorar", que también envía el formulario y la lógica de fondo establece un estado correcto en una base de datos. En este caso (ignorar) no se desea la validación (porque no es necesario rellenar el campo "Foo").
¿Cuál es la mejor manera de manejar los 2 escenarios?
- Soy consciente de que podría abandonar "requerido" y hacer la validación en otro lugar (backend / JavaScript). Estoy buscando una manera de mantener el "requerido".
- Podría usar algunos Js
onclick
para el escenario del botón ignorar y eliminar el atributo justo antes de enviar el formulario ( https://stackoverflow.com/a/13951500/356726 ).
Pero en realidad estoy buscando algo más inteligente ....
--- Editar ---
Sí, duplicado del atributo Requerido HTML5
Debería usar el enfoque # 1 por los siguientes motivos: La razón principal para usar la validación required
lugar de la validación de JavaScript es que es más simple y funciona incluso cuando JavaScript está desactivado. Aquí la simplicidad no se aplica, ya que el uso de lo required
dificulta las cosas. Y la última razón tampoco se aplica: con JavaScript deshabilitado y el navegador es compatible, el botón "ignorar" no funciona a menos que se ingresen algunos datos en el campo de texto.
Otra alternativa es la mencionada en la respuesta de @KattKenefick. Incluso podría resultar en una estructura y lógica más simples. Si la forma es realmente tan simple como en el ejemplo, es sencillo dividirla en dos formas:
<form action="myform.php">
Foo: <input type="text" name="someField" required="required">
<input type="submit" value="submit">
</form>
<form action="myform.php">
<input type="submit" value="ignore">
</form>
No JavaScript, no se necesita una segunda forma, y la validación puede permanecer:
Exactamente para este caso de uso, la especificación HTML5 ha diseñado el atributo formnovalidate
para enviar elementos (como <input type=submit>
), como uno de los atributos para el envío de formularios :
El atributo
formnovalidate
se puede usar para hacer que los botones de envío no activen la validación de la restricción.
Así que simplemente pon
<form action="myform.php">
Foo: <input type="text" name="someField" required>
<input type="submit" value="submit">
<input type="submit" value="ignore" formnovalidate>
</form>
Si no desea utilizar Javascript, puede hacerlos formularios separados y tener todas las entradas configuradas como ocultas para el formulario de ignore
.
No es la mejor opción, pero es una alternativa.
Su # 2 es un enfoque común. Algo como:
$(''input[value="ignore"]'').click(function() {
$(this).siblings(''input[type="text"]'').removeAttr(''required'');
});
Puede que tenga que usar la tecla del ratón para vencer a enviar.