Lorsque l'on regarde la plupart des sites (y compris SO), la plupart d'entre eux utilisent:
<input type="button" />
au lieu de:
<button></button>
- Quelles sont les principales différences entre les deux, le cas échéant?
- Y a-t-il des raisons valables d'utiliser l'un au lieu de l'autre?
- Y a-t-il des raisons valables pour les combiner?
- L'utilisation
<button>
comporte- t-elle des problèmes de compatibilité, vu qu'elle n'est pas très répandue?
html
button
compatibility
html-input
Aron Rotteveel
la source
la source
<button>
maintenant?<button />
possède également unform
attribut (et des attributs associés) afin qu'il puisse être lié à des formulaires dans d'autres parties du corps du document.Tout comme une note annexe,
<button>
sera implicitement soumis, ce qui peut poser des problèmes si vous souhaitez utiliser un bouton dans un formulaire sans qu'il le soumette. Ainsi, une autre raison d'utiliser<input type="button">
(ou<button type="button">
)Modifier - plus de détails
Sans type,
button
reçoit implicitement le type desubmit
. Peu importe le nombre de boutons ou d'entrées de soumission présents dans le formulaire, chacun d'entre eux qui est explicitement ou implicitement tapé comme soumis, lorsque vous cliquez dessus, soumettra le formulaire.Il existe 3 types pris en charge pour un bouton
la source
submit
par défaut quand 99,9% des formulaires en ont beaucoupbutton
avec unsubmit
?!Cet article semble offrir un assez bon aperçu de la différence.
Depuis la page:
la source
À l'intérieur d'un
<button>
élément, vous pouvez mettre du contenu, comme du texte ou des images.C'est la différence entre cet élément et les boutons créés avec l'
<input>
élément.la source
<input />
s'agit bien d'un élément nul, alors qu'il<button>
ne l'est pasCitation
De: http://www.w3schools.com/tags/tag_button.asp
Si je comprends bien, la réponse est la compatibilité et la cohérence des entrées d'un navigateur à l'autre
la source
Je citerai l'article La différence entre les ancres, les entrées et les boutons :
Les ancres (l'
<a>
élément) représentent des hyperliens, des ressources auxquelles une personne peut accéder ou télécharger dans un navigateur. Si vous souhaitez autoriser votre utilisateur à passer à une nouvelle page ou à télécharger un fichier, utilisez une ancre.Une entrée (
<input>
) représente un champ de données: vous devez donc envoyer certaines données utilisateur au serveur. Il existe plusieurs types d'entrée liés aux boutons:<input type="submit">
<input type="image">
<input type="file">
<input type="reset">
<input type="button">
Chacun d'eux a une signification, par exemple " fichier " est utilisé pour télécharger un fichier, " réinitialiser " efface un formulaire et " soumettre " envoie les données au serveur. Vérifiez la référence W3 sur MDN ou sur W3Schools .
Le bouton (l'
<button>)
élément est assez polyvalent:::before
et des::after
pseudo-éléments;disabled
attribut. Cela facilite leur activation et leur désactivation.Encore une fois, vérifiez la référence W3 pour la
<button>
balise sur MDN ou sur W3Schools .la source
Citant la page Formulaires dans le manuel HTML:
la source
Utilisez le bouton de l'élément d'entrée si vous souhaitez créer un bouton dans un formulaire. Et utilisez la balise bouton si vous souhaitez créer un bouton pour une action.
la source
contre.
-
dans les navigateurs modernes, les deux éléments sont facilement stylisables avec css mais dans la plupart des cas, l'
button
élément est préféré car vous pouvez styliser plus avec des éléments html et pseudo internesla source
En ce qui concerne le style CSS, le
<button type="submit" class="Btn">Example</button>
mieux est qu'il vous donne la possibilité d'utiliser des classes CSS:before
et:after
pseudo qui peuvent vous aider.En raison du
<input type="button">
rendu visuel différent de celui<a>
ou<span>
lors du style avec des classes dans certaines situations, je les évite.Il vaut la peine de noter que la meilleure réponse actuelle a été écrite en 2009. IE6 n'est plus un problème de nos jours, donc la
<button type="submit">Wins</button>
cohérence du style à mes yeux est prioritaire.la source
Il y a une grande différence si vous utilisez jQuery. jQuery connaît plus d'événements sur les entrées que sur les boutons. Sur les boutons, jQuery ne connaît que les événements de «clic». Sur les entrées, jQuery est conscient des événements de «clic», «focus» et «flou».
Vous pouvez toujours lier des événements à vos boutons selon vos besoins, mais sachez simplement que les événements dont jQuery a automatiquement connaissance sont différents. Par exemple, si vous créez une fonction qui est exécutée chaque fois qu'il y a un événement «focusin» sur votre page, une entrée déclenche la fonction mais pas un bouton.
la source
<button>
est flexible en ce qu'il peut contenir du HTML. De plus, il est beaucoup plus facile de styliser à l'aide de CSS, et le style est appliqué à tous les navigateurs. Cependant, il existe certains inconvénients concernant Internet Explorer (Eww! IE!). Internet Explorer ne détecte pas correctement l'attribut de valeur, en utilisant le contenu de la balise comme valeur. Toutes les valeurs d'un formulaire sont envoyées côté serveur, que vous cliquiez ou non sur le bouton. Cela rend son utilisation<button type="submit">
délicate et pénible.<input type="submit">
d'autre part n'a pas de problèmes de valeur ou de détection, mais vous ne pouvez pas, cependant, ajouter du HTML comme vous le pouvez avec<button>
. Il est également plus difficile à coiffer et le style ne répond pas toujours bien à tous les navigateurs. J'espère que cela vous a aidé.la source
Je veux juste ajouter quelque chose au reste des réponses ici. Les éléments d'entrée sont considérés comme des éléments vides ou vides (les autres éléments vides sont area, base, br, col, hr, img, input, link, meta et param. Vous pouvez également vérifier ici ), ce qui signifie qu'ils ne peuvent avoir aucun contenu. En plus de ne pas avoir de contenu, les éléments vides ne peuvent pas avoir de pseudo-éléments comme :: after et :: before , ce que je considère comme un inconvénient majeur.
la source
en outre, l'une des différences peut provenir du fournisseur de la bibliothèque et de ce qu'il code. par exemple ici, j'utilise la plate-forme cordova en combinaison avec l'interface utilisateur angulaire mobile, et bien que les balises input / div / etc fonctionnent bien avec ng-click, le bouton peut provoquer le blocage du débogueur Visual Studio, sûrement par les différences, que le programmeur a causées; notez que la réponse de MattC pointe vers le même problème, le jQuery est juste une lib, et le fournisseur n'a pas pensé à une fonctionnalité sur un élément, qu'il fournit sur un autre. donc lorsque vous utilisez une bibliothèque, vous pouvez rencontrer un problème avec un élément, que vous ne rencontrerez pas avec un autre. et simplement le populaire comme
input
, sera principalement le fixe, juste parce qu'il est plus populaire.la source
Bien que cette question soit très ancienne et ne soit plus pertinente, veuillez garder à l'esprit que la plupart des problèmes que la
<button>
balise avait auparavant n'existent plus et qu'il est donc fortement conseillé de l'utiliser.Dans le cas où vous ne pouvez pas le faire pour diverses raisons, n'oubliez pas d'ajouter l'attribut role = "bouton" dans votre balise dès l'accessibilité. Cet article est assez informatif: https://www.deque.com/blog/accessible-aria-buttons/
la source