Eu estou fazendo o seguinte:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Isso funciona bem, mas recebo um erro de validação HTML5 que diz que "O elemento 'botão' não deve ser aninhado no elemento 'um botão'.
Alguém pode me dar conselhos sobre o que devo fazer?
Respostas:
Não , ele não é HTML5 válido, de acordo com o documento de especificação HTML5 do W3C :
Em outras palavras, você pode aninhar qualquer elemento dentro de um,
<a>
exceto o seguinte:<a>
<audio>
(se o atributo de controles estiver presente)<button>
<details>
<embed>
<iframe>
<img>
(se o atributo usemap estiver presente)<input>
(se o atributo type não estiver no estado oculto )<keygen>
<label>
<menu>
(se o atributo type estiver no estado da barra de ferramentas )<object>
(se o atributo usemap estiver presente)<select>
<textarea>
<video>
(se o atributo de controles estiver presente)Se você estiver tentando ter um botão vinculado a algum lugar, envolva esse botão dentro de uma
<form>
tag como:No entanto, se sua
<button>
tag é estilizada usando CSS e não se parece com o widget do sistema ... Faça um favor a si mesmo, crie uma nova classe para sua<a>
tag e estilize-a da mesma maneira.fonte
<div>
dentro de um<a>
é absolutamente válido em HTML5: validator.w3.org/nu/…Se você estiver usando o Bootstrap 3 , isso funciona muito bem
fonte
Não.
A solução a seguir depende do JavaScript.
Se o botão deve ser colocado dentro de um já existente
<form>
commethod="post"
, em seguida, garantir o botão tem o atributotype="button"
de outra forma o botão apresentará a operação POST. Dessa forma, você pode ter um<form>
que contenha uma mistura de botões de operação GET e POST.fonte
<a>
interno<button>
(com o mesmohref
) um backup se o JS estiver desativado e, daqui a seis meses, ficarei com vergonha de admitir isso.Acabei de pular para o mesmo problema e resolvi substituindo a tag 'button' por 'span'. No meu caso, estou usando o bootstrap. É assim que parece:
fonte
<a>
, que faz parte do link, mas não tenha o estilo de um botão. Por exemplo, qualquer clique em umdiv
(imagem, plano de fundo, texto etc.) vai para um link, mas apenas sespan
parece com um botão.Seria muito estranho se isso fosse válido e eu esperaria que fosse inválido. O que significa ter um elemento clicável dentro de outro elemento clicável? Qual é - um botão ou um link?
fonte
border: 2px outset
. Se você quiser arredondar um pouco as esquinas, também poderá usar um raio de borda . Uma<img>
tag simples também funcionaria bem.Outra opção é usar o atributo onclick do botão:
Isso funciona, no entanto, o usuário não verá o link exibido em foco, como faria se estivesse dentro do elemento.
fonte
Atualmente, mesmo que a especificação não permita, "parece" ainda funcionar para incorporar o botão em uma
<a href...><button ...></a>
tag, FWIW ...fonte
<button>
não está contido em a<form>
. No entanto, assim que o botão está contido (por exemplo,<form>...<a><button>
) , ele pára de funcionar, a menos que alguém desative o manipulador ao clicar no botão. São giros suficientes para evitar esse cenário.Você pode adicionar uma classe ao botão e colocar algum script para redirecioná-lo.
Eu faço assim:
fonte
por que não ... você também pode incorporar a imagem no botão
fonte
Explicação e solução de trabalho aqui: How to: div com onclick dentro de outra div com onclick javascript
executando este script em seu manipulador de cliques interno:
fonte
É ilegal no HTML5 incorporar um elemento de botão dentro de um link.
Melhor usar CSS no padrão e: estados ativo (pressionado):
fonte
Eu tento suas soluções javascript, mas, para o trabalho, preciso inserir a
e.preventDefault();
função javascript na minha.fonte
Use o atributo de formação dentro do botão
PS! Funciona apenas se o seu botão digitar = "enviar"
fonte
fonte