type d'entrée = «soumettre» La balise du bouton Vs est-elle interchangeable?

233

input type="submit"et le buttontag sont-ils interchangeables? ou s'il y a une différence, alors quand l'utiliser input type="submit"et quand button?

Et s'il n'y a pas de différence, pourquoi avons-nous 2 balises dans le même but?

Jitendra Vyas
la source
Évitez une journée amusante lors de l'utilisation buttonet l' valueattribut dans une version d'IE inputenverra simplement ce que vous attendiez, une version d'IE ne fonctionne pas bien avec buttons.
Rubens Mariuzzo
Les réponses sont fondamentalement les mêmes que pour input type="button"vs button type=button: stackoverflow.com/questions/469059/…
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功
Est-ce que cela répond à votre question? <button> vs <input type = "button" />. Lequel utiliser?
leonheess

Réponses:

131

http://www.w3.org/TR/html4/interact/forms.html#h-17.5

Les boutons créés avec l'élément BUTTON fonctionnent comme les boutons créés avec l'élément INPUT, mais ils offrent des possibilités de rendu plus riches: l'élément BUTTON peut avoir du contenu. Par exemple, un élément BUTTON qui contient une image fonctionne comme et peut ressembler à un élément INPUT dont le type est défini sur "image", mais le type d'élément BUTTON autorise le contenu.

Donc, pour la fonctionnalité seulement, ils sont interchangeables!

(N'oubliez pas, type="submit"c'est la valeur par défaut button, alors laissez-la!)

MatTheCat
la source
7
Attention, IE6 soumet les valeurs de tous les boutons de la page, ce qui rend difficile de déterminer exactement quel bouton a été cliqué. Explication: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam
6
Juste Pour votre information , vous ne devez utiliser type="submit"avec le bouton, comme la valeur par défaut typeest submit.
synchronisation le
8
C'est ce que dit le W3C, mais je suis presque sûr d'avoir vu des cas où la typevaleur par défaut était button. Je préfère expliciter chaque attribut pour éviter toute incohérence du navigateur.
MatTheCat
5
selon référence oui. mais tous les navigateurs ne respectent pas les spécifications de référence, non?
EKanadily
2
@chharvey, aucun des premiers ne peut avoir de nœuds enfants; c'est-à-dire un contenu non textuel. Je suppose que vous pourriez dire qu'à part la brièveté, il n'y a aucune raison pour que ce dernier existe.
Paul Draper
71

Le <input type="button">est juste un bouton et ne fera rien par lui-même. Le <input type="submit">, à l'intérieur d'un élément de formulaire, soumettra le formulaire lorsque vous cliquez dessus.

Un autre bouton «spécial» utile est <input type="reset">celui qui effacera le formulaire.

leprogrammeur
la source
5
La question concerne la balise de bouton et non <input type = "button">
Caltor
7
La question concerne <input> le point et les <button>mots clés. Vous avez fourni des informations utiles sur <input>dans votre réponse, mais il manque le <button>côté.
RPGP
43

Utilisez la balise <button> au lieu de <input type = "button" ..> . C'est la pratique conseillée dans le bootstrap 3.

http://getbootstrap.com/css/#buttons-tags

"Rendu multi-navigateur

En tant que meilleure pratique, nous vous recommandons fortement d'utiliser l'élément <button> dans la mesure du possible pour garantir la correspondance entre les navigateurs.

Entre autres choses, il y a un bogue Firefox qui nous empêche de définir la hauteur de ligne des boutons basés sur <input>, les faisant ne pas correspondre exactement à la hauteur des autres boutons sur Firefox. "

rolfk
la source
4
+1 pour cela. buttonest beaucoup plus explicite, et vient avec des ariafonctionnalités d'accessibilité, et est beaucoup plus facile à styliser. Il est également avant-gardiste, car il s'agit de HTML5.
user1429980
37

Bien que les deux éléments fournissent fonctionnellement le même résultat *, je vous recommande fortement d'utiliser<button> :

  • Beaucoup plus explicite et lisible. inputsuggère que le contrôle est modifiable ou peut être modifié par l'utilisateur;buttonest beaucoup plus explicite quant à l'objectif qu'il sert
  • Plus facile à styliser en CSS; comme mentionné ci-dessus, FIrefox et IE ont des bizarreries qui input[type="submit"]ne s'affichent pas correctement dans certains cas
  • Demandes prévisibles: IE a des comportements très positifs lorsque des valeurs sont soumises dans la demande POST/ GETau serveur
  • Compatible avec le balisage; vous pouvez imbriquer des éléments, par exemple des icônes, à l'intérieur du bouton.
  • HTML5, avant-gardiste; en tant que développeurs, il est de notre responsabilité d'adopter la nouvelle spécification une fois qu'elle est officialisée. HTML5, en ce moment, est officiel depuis plus d'un an maintenant, et il a été démontré dans de nombreux cas qu'il stimule le référencement .

* À l'exception de qui par défaut n'a aucun comportement spécifié.<button type="button">

En résumé, je déconseille fortement l'utilisation de<input type="submit" /> .

user1429980
la source
Je vous remercie. Je cherchais cela, en particulier pour le point sémantique HTML5. En 2020, nous devons penser au-delà de la pure fonctionnalité.
pierre_loic
27

<input type='submit' />ne prend pas en charge HTML à l'intérieur, car il s'agit d'une seule balise à fermeture automatique. <button>, D'autre part, prend en charge HTML, images, etc. à l' intérieur , car il est une paire de tag: <button><img src='myimage.gif' /></button>. <button>est également plus flexible en ce qui concerne le style CSS.

L'inconvénient <button>est qu'il n'est pas entièrement pris en charge par les anciens navigateurs. IE6 / 7, par exemple, ne l'affiche pas correctement.

Sauf si vous avez une raison précise, il est probablement préférable de s'y tenir <input type='submit' />.

Jared Ng
la source
1
La réponse était d'il y a 2 ans. En outre, il est tout à fait possible de spécifier un texte de bouton alternatif:<input type="submit" value="Log In" />
Jared Ng
2
@nailer Vous avez parfaitement droit à votre opinion, mais toute réponse va forcément faire référence à l'état actuel de la technologie. Peut-être que HTML 6 sera obsolète <button>au profit de quelque chose de nouveau. Cela signifie-t-il que nous ne devrions pas du tout mentionner une balise spécifique dans les réponses, car cela pourrait changer à un moment donné dans le futur? Je préférerais laisser cela au lecteur pour déterminer comment les réponses s'appliquent à sa situation. Tant que l'information est précieuse pour le lecteur, je ne vois pas le problème de l'inclure.
Jared Ng
1
Au moment où la réponse a été écrite, IE6 / 7 était déjà obsolète. Un nouveau développeur Web lisant votre message, sans vérifier vos arguments à l'appui et sans vous rendre compte qu'ils ne s'appliquent plus, penserait qu'il y a de bonnes raisons de ne pas utiliser les éléments "bouton".
mikemaccana
2
@nailer Il n'y a pas de liste de navigateurs universels "obsolètes" à laquelle tout le monde adhère. Différents lieux de travail ont des exigences différentes pour les navigateurs pris en charge. Ce n'est pas parce que votre norme de "navigateurs pris en charge" en 2011 ne comprenait pas IE6 / 7 que c'est le cas partout.
Jared Ng
1
Je suis conscient qu'il n'y a pas de liste de navigateurs universels "obsolètes" - d'où pas tous mention d'une telle chose. Tout ce que je dis, c'est que cela pourrait être mieux libellé comme «IE6 / 7 ne prend pas correctement en charge le bouton d'affichage. Cela empêche StackOverflow de s'arrêter indéfiniment lors des solutions de contournement IE6.
mikemaccana
14

Je me rends compte que c'est une vieille question mais je l'ai trouvée sur mozilla.org et je pense qu'elle s'applique.

Un bouton peut être de trois types: soumettre, réinitialiser ou bouton. Un clic sur un bouton d'envoi envoie les données du formulaire à la page Web définie par l'attribut action de l'élément.

Un clic sur un bouton de réinitialisation réinitialise immédiatement tous les widgets du formulaire à leur valeur par défaut. D'un point de vue UX, cela est considéré comme une mauvaise pratique.

Un clic sur un bouton bouton ne fait ... rien! Cela peut paraître idiot, mais c'est incroyablement utile pour créer des boutons personnalisés avec JavaScript.

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form#And_a_<button>_to_finish

Jere.me
la source
En quoi est-il utile s'il ne fait rien?
Honey
4
Parce que vous pouvez ensuite accrocher les gestionnaires à l'événement click via Javascript
fonso
@Honey par exemple, vous pouvez coder un <button type="button">pour faire avancer un curseur / carrousel vers la diapositive suivante.
chharvey
11

<button>est plus récent que <input type="submit">, est plus sémantique, facile à styliser et prend en charge le HTML à l'intérieur.

Acaz Souza
la source
8

Bien que les autres réponses soient excellentes et répondent à la question, il y a une chose à considérer lors de l'utilisation de input type="submit"et button. Avec un, input type="submit"vous ne pouvez pas utiliser un pseudo-élément CSS sur l'entrée mais vous pouvez le faire pour un bouton!

C'est l'une des raisons d'utiliser un buttonélément sur une entrée pour le style.

L84
la source
3

Je ne sais pas s'il s'agit d'un bogue ou d'une fonctionnalité, mais il y a une différence très importante (dans certains cas au moins) que j'ai trouvée: <input type="submit">crée une paire de valeurs clés dans votre demande et <button type="submit">ne le fait pas. Testé dans Chrome et Safari.

Donc, lorsque vous avez plusieurs boutons d'envoi dans votre formulaire et que vous voulez savoir sur lequel vous avez cliqué - ne l'utilisez pas button, utilisez input type="submit"plutôt.

Ivan Yarych
la source
d'après mon expérience, c'est un tout autre moyen, le bouton passe $ _POST ["submit_name"] et l'entrée ne le fait PAS. testé sur chrome. Firefox envoie toujours $ _POST ["submit_name"].
Gall Annonim
@GallAnnonim peut-être que cela dépend du type de document. Parce que j'utilise définitivement input type = submit et cela fonctionne sur le chrome
Ivan Yarych
intresting ... J'ai utilisé <! DOCTYPE html> en utilisant lang "pl" && encodage utf-8 si cela fait une différence. chrome est 58.0.3029.96
Gall Annonim
-2

Si vous parlez <input type=button>, il ne soumettra pas automatiquement le formulaire

si vous parlez de la <button>balise, c'est plus récent et ne se soumet pas automatiquement dans tous les navigateurs.

En fin de compte, si vous souhaitez que le formulaire soit soumis au clic dans tous les navigateurs, utilisez <input type="submit">

DarylChymko
la source
14
Vous pouvez utiliser <button type="submit">pour soumettre automatiquement des formulaires.
jumpnett