web-dev-qa-db-fra.com

Si un formulaire HTML comporte deux boutons <input type = "submit">, comment savoir lequel a été cliqué?

Supposons que j'ai le formulaire HTML suivant:

<form>
...
<input type="submit" name="queue" value="Queue item">
<input type="submit" name="submit" value="Submit item">
</form>

Comment savoir sur quel bouton l'utilisateur a cliqué (sans utiliser javascript)?

J'ai regardé les données soumises et il semble que lorsque "Queue Item" est cliqué puis "queue" = "Queue Item" est envoyé au serveur. Et quand "Submit item" est cliqué puis "submit" = "Submit item" ensembles envoyés.

Puis-je compter sur ce comportement? Est-il documenté quelque part dans la norme sur les formulaires HTML? Comment faites-vous les gars?

43
bodacydo

Oui, vous pouvez vous y fier; il est entièrement documenté ici . Les lignes pertinentes spécifiques disent:

Lorsqu'un formulaire est soumis pour traitement, certains contrôles ont leur nom associé à leur valeur actuelle et ces paires sont soumises avec le formulaire. Les contrôles pour lesquels des paires nom/valeur sont soumises sont appelés contrôles réussis.

et

Si un formulaire contient plusieurs boutons d'envoi, seul le bouton d'envoi activé réussit.

54
Tim Perry

Oui, vous pouvez compter sur ce comportement.

Quand <input type="submit" name="queue" value="Queue item"> est cliqué, le champ "file d'attente" sera défini et "soumettre" ne le sera pas.

Alors que lorsque l'autre est cliqué, le champ "soumettre" sera défini, et "file d'attente" ne le sera pas.

Si vous n'êtes pas assuré par cela, vous pouvez les diviser en 2 formes et y travailler de cette façon.

5
mauris

Vous pouvez compter sur ce comportement. Vous obtenez la valeur de l'entrée. J'utiliserais javascript pour basculer une valeur de formulaire masquée, mais comme vous n'avez mentionné aucun javascript, vous n'avez pas plusieurs choix.

C'est une norme. Puisqu'il s'agit d'une balise input et qu'il a une value, cela signifie que vous obtenez le value soumis.

3
Pentium10

Divisez le formulaire en deux formulaires, en répliquant toutes les autres entrées nécessaires à l'autre action. Ou, si vous avez juste besoin de savoir si l'utilisateur veut "mettre en file d'attente ou soumettre" l'élément, changez les deux boutons de soumission en sélections radio pour basculer entre les deux options, et ayez un nouveau bouton "soumettre le formulaire" séparé.

Dans cette situation, si vous souhaitez une option en un clic, vous pouvez utiliser Javascript pour détecter le moment où l'un des boutons radio est sélectionné et soumettre automatiquement le formulaire instantanément. (Utiliser Javascript pour l'interface utilisateur, plutôt que la gestion des formulaires)

0
MidnightLightning