2010-01-24 4 views
39

Supposons que j'ai le formulaire HTML suivant:Si un formulaire HTML a deux boutons <input type = "submit">, comment puis-je savoir sur quel bouton a été cliqué?

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

Comment puis-je 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 me fier à ce comportement? Est-il documenté quelque part dans la norme sur les formulaires HTML? Comment faites-vous les gars?

+1

Copie possible de [Deux boutons de soumission sous une forme] (http://stackoverflow.com/questions/547821/two-submit-buttons-in-one-form –

Répondre

49

Oui, vous pouvez compter sur cela; il est entièrement documenté here. Les lignes pertinentes spécifiques indiquent:

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 les paires nom/valeur sont soumises sont appelés contrôles réussis.

et

Si un formulaire contient plus d'un bouton d'envoi, seul le bouton activé envoi est réussie.

+13

Lorsque l'utilisateur appuie sur le bouton Entrée au lieu d'appuyer sur un bouton, le premier bouton de soumission sur un formulaire sera le bouton actif. – Scharrels

+4

Non, vous ne pouvez pas vraiment compter sur ce comportement.Dans IE6 vous obtiendrez la valeur des deux boutons soumis - juste parce que son standard ne signifie pas qu'il est correctement implémenté. – Erik

+0

Sh * t. Qu'est-ce que je fais alors, Erik? – bodacydo

3

Vous pouvez compter sur ce comportement. Vous obtenez la valeur de l'entrée. Je voudrais utiliser javascript pour basculer une valeur de formulaire caché, mais puisque vous avez mentionné aucun javascript vous n'avez pas plusieurs choix.

C'est un standard. Comme il s'agit d'une balise input et qu'elle porte un value, cela signifie que vous obtenez le value soumis.

4

Oui, vous pouvez compter sur ce comportement.

Lorsque vous cliquez sur <input type="submit" name="queue" value="Queue item">, le champ "file d'attente" sera défini et "submit" ne le sera pas. Alors que lorsque l'on clique sur l'autre, le champ "submit" sera défini et "queue" ne le sera pas.

Si vous n'êtes pas sûr, vous pouvez les diviser en 2 formes et travailler ainsi.

0

Divisez le formulaire en deux formes, en répliquant toutes les autres entrées requises par 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 aux sélections radio pour basculer entre les deux options, et disposez d'un nouveau bouton "soumettre le formulaire".

Dans cette situation, si vous voulez une option en un seul clic, vous pouvez utiliser Javascript pour détecter quand l'un des boutons radio est sélectionné, et envoyer automatiquement le formulaire instantanément. (Utilisation de Javascript pour l'interface utilisateur plutôt que pour la gestion des formulaires)

Questions connexes