Estoy haciendo lo siguiente:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Esto funciona bien, pero recibo un error de validación HTML5 que dice "El elemento 'botón' no debe estar anidado dentro del elemento 'un botón'.
¿Alguien puede darme consejos sobre lo que debo hacer?
Respuestas:
No , no es HTML5 válido según el documento de especificaciones HTML5 de W3C :
En otras palabras, puede anidar cualquier elemento dentro de un
<a>
excepto los siguientes:<a>
<audio>
(si el atributo de controles está presente)<button>
<details>
<embed>
<iframe>
<img>
(si el atributo usemap está presente)<input>
(si el atributo type no está en estado oculto )<keygen>
<label>
<menu>
(si el atributo type está en el estado de la barra de herramientas )<object>
(si el atributo usemap está presente)<select>
<textarea>
<video>
(si el atributo de controles está presente)Si está intentando tener un botón que se vincule a algún lugar, envuelva ese botón dentro de una
<form>
etiqueta como tal:Sin embargo, si su
<button>
etiqueta está diseñada con CSS y no se parece al widget del sistema ... Hágase un favor, cree una nueva clase para su<a>
etiqueta y póngale el mismo estilo.fuente
<div>
an dentro<a>
es absolutamente válido en HTML5: validator.w3.org/nu/…Si estás usando Bootstrap 3 , esto funciona bastante bien
fuente
No.
La siguiente solución se basa en JavaScript.
Si el botón es para ser colocado dentro de una existente
<form>
conmethod="post"
, a continuación, asegurar el botón tiene el atributotype="button"
de lo contrario el botón someterá la operación POST. De esta manera, puede tener un<form>
que contiene una mezcla de botones de operación GET y POST.fuente
<a>
dentro de la<button>
(con el mismohref
) como un respaldo si JS está desactivado, y seis meses a partir de ahora definitivamente voy a estar avergonzado de que admití eso.Acabo de saltar al mismo problema y lo resolví sustituyendo la etiqueta 'botón' por la etiqueta 'span'. En mi caso estoy usando bootstrap. Así es como esto luce:
fuente
<a>
, que es parte del enlace, pero no tiene el estilo de un botón. Por ejemplo, cualquier clic dentro de undiv
(imagen, fondo, texto, etc.) va a un enlace, pero solospan
parece un botón.Sería realmente extraño si eso fuera válido, y esperaría que no sea válido. ¿Qué debería significar tener un elemento cliqueable dentro de otro elemento cliqueable? ¿Cuál es: un botón o un enlace?
fuente
border: 2px outset
. Si desea redondear un poco las esquinas, también podría usar un radio de borde . Una<img>
etiqueta simple también funcionaría bien.Otra opción es usar el atributo onclick del botón:
Esto funciona, sin embargo, el usuario no verá el enlace que se muestra al pasar el mouse como si estuviera dentro del elemento.
fuente
En estos días, incluso si la especificación no lo permite, "parece" que todavía funciona para incrustar el botón dentro de una
<a href...><button ...></a>
etiqueta, FWIW ...fuente
<button>
no está contenido dentro de a<form>
. Sin embargo, tan pronto como se contiene el botón (por ejemplo<form>...<a><button>
) , esto deja de funcionar, a menos que uno desactive el controlador de clic del botón. Esto es suficiente para evitar evitar este escenario.Puede agregar una clase al botón y colocar un script que lo redirija.
Lo hago de esta manera:
fuente
por qué no ... también puedes incrustar la imagen en el botón
fuente
Explicación y solución de trabajo aquí: Cómo: div con onclick dentro de otro div con onclick javascript
ejecutando este script en su controlador de clic interno:
fuente
Es ilegal en HTML5 incrustar un elemento de botón dentro de un enlace.
Es mejor usar CSS en el estado predeterminado y: estados activos (presionados):
fuente
Pruebo sus soluciones de JavaScript pero, para el trabajo, necesito insertarlas
e.preventDefault();
en mi función de JavaScript.fuente
Use el atributo de formación dentro del botón
¡PD! Solo funciona si su botón type = "submit"
fuente
fuente