290 votes

Plusieurs boutons d'envoi dans un formulaire HTML

Disons que vous créez un assistant dans un formulaire HTML. Un bouton permet de revenir en arrière et un autre d'avancer. Puisque le bouton arrière apparaît en premier dans le balisage lorsque vous appuyez sur Enter il utilisera ce bouton pour soumettre le formulaire.

Exemple :

<form>
  <!-- Put your cursor in this field and press Enter -->
  <input type="text" name="field1" />

  <!-- This is the button that will submit -->
  <input type="submit" name="prev" value="Previous Page" />

  <!-- But this is the button that I WANT to submit -->
  <input type="submit" name="next" value="Next Page" />
</form>

Je voudrais pouvoir décider quel bouton est utilisé pour soumettre le formulaire lorsqu'un utilisateur appuie sur Enter . De cette façon, lorsque vous appuyez sur Enter l'assistant passe à la page suivante et non à la précédente. Devez-vous utiliser tabindex pour faire ça ?

0 votes

Utilisez simplement pour float : left

152voto

palotasb Points 935

J'espère que cela vous aidera. Je fais juste le tour de float en cliquant sur les boutons à droite.

De cette façon, le Prev est à gauche du bouton Next mais le bouton Next vient en premier dans la structure HTML :

.f {
  float: right;
}
.clr {
  clear: both;
}

<form action="action" method="get">
  <input type="text" name="abc">
  <div id="buttons">
    <input type="submit" class="f" name="next" value="Next">
    <input type="submit" class="f" name="prev" value="Prev">
    <div class="clr"></div><!-- This div prevents later elements from floating with the buttons. Keeps them 'inside' div#buttons -->
  </div>
</form>

Avantages par rapport aux autres suggestions : pas de code JavaScript, accessible, et les deux boutons sont conservés. type="submit" .

30 votes

Ne faites pas cela sans modifier également l'ordre des onglets, afin que le fait d'appuyer sur le bouton d'onglet fasse défiler les boutons tels qu'ils apparaissent à l'écran.

2 votes

Malheureusement, cela ne fonctionne que si les boutons sont relativement proches les uns des autres. Dans des situations plus compliquées, comme une page plus grande avec plusieurs boutons répartis dans chaque coin mais tous dans un seul formulaire, c'est tout simplement ingérable.

67voto

Wally Lawless Points 3205

Changez le type de bouton précédent en un bouton comme celui-ci :

<input type="button" name="prev" value="Previous Page" />

Maintenant, le Suivant serait le bouton par défaut, et vous pourriez également ajouter le bouton default afin que votre navigateur le mette en évidence comme suit :

<input type="submit" name="next" value="Next Page" default />

47 votes

Quoi default L'attribut dont vous parlez ? Il n'y a pas d'attribut "par défaut", qui serait valable : w3.org/html/wg/drafts/html/master/ (pas dans HTML5, HTML 4.01 Transitional/Strict, XHTML 1.0 Strict). Et je ne vois pas pourquoi changer le type d'entrée de submit à button serait mieux. Vous pouvez avoir plusieurs éléments de saisie de type submit dans un formulaire sans problème. Je ne comprends pas vraiment pourquoi cette réponse est si bien votée.

3 votes

Le fait d'avoir une entrée de type "bouton" n'exécute pas l'action du formulaire. Vous pouvez avoir un onclick ou autre, et ainsi exécuter une autre fonction que l'action de formulaire "par défaut" (qui est exécutée en appuyant sur le bouton de type "submit"). C'est ce que je cherchais et c'est pourquoi j'ai voté pour. Je ne peux pas parler de l'attribut "par défaut", qui ne faisait pas partie de mon problème ;) merci pour votre clarification, cependant.

2 votes

@Sk8erPeter, @Jonas .... hmm... je soupçonne ceci default L'attribut est un attribut global ; attribut énuméré qui est lié aux états d'énumération : w3.org/html/wg/drafts/html/master/ . à part ce point l'aspect bouton de cette réponse n'est pas une réponse c'est un ' suggestion conditionnelle ou une requête ( la question elle-même ).

62voto

huseyint Points 8196

Donnez le même nom à vos boutons d'envoi, comme ceci :

<input type="submit" name="submitButton" value="Previous Page" />
<input type="submit" name="submitButton" value="Next Page" />

Lorsque l'utilisateur appuie sur Enter et le demande va au serveur, vous pouvez vérifier la valeur de submitButton sur votre code côté serveur qui contient une collection de formulaires name/value paires. Par exemple, dans ASP Classic :

If Request.Form("submitButton") = "Previous Page" Then
    ' Code for the previous page
ElseIf Request.Form("submitButton") = "Next Page" Then
    ' Code for the next page
End If

Référence : Utilisation de plusieurs boutons d'envoi sur un seul formulaire

30 votes

Ce n'est pas ce que l'utilisateur a demandé. L'utilisateur voulait savoir comment contrôler quel bouton d'envoi d'un formulaire est activé lorsque l'on appuie sur la touche Entrée, c'est-à-dire quel est le bouton par défaut.

21 votes

Ne fonctionne pas dans une application I18n où vous ne connaissez même pas l'étiquette du bouton.

0 votes

Dans quel système ou solution technologique le serveur lui-même ne connaîtrait-il pas l'étiquette utilisée pour les boutons "suivant" et "retour" ? Le serveur n'a-t-il pas généré les boutons "Suivant" et "Précédent" en premier lieu ? (Si la localisation est gérée côté client, j'imagine que le serveur peut ne pas le savoir, mais je n'ai jamais entendu parler de cela pour le HTML).

32voto

Polsonby Points 11824

Si le fait que le premier bouton soit utilisé par défaut est cohérent d'un navigateur à l'autre, placez-les dans le bon sens dans le code source, puis utilisez les CSS pour modifier leur position apparente.

float à gauche et à droite pour les intervertir visuellement, par exemple.

18voto

Scott Gottreu Points 1253

Si vous voulez vraiment que cela fonctionne comme une boîte de dialogue d'installation, il suffit de mettre l'accent sur le bouton "Suivant" OnLoad.

De cette façon, si l'utilisateur frappe Return le formulaire est soumis et va de l'avant. S'ils veulent revenir en arrière, ils peuvent cliquer sur Tab ou cliquez sur le bouton.

3 votes

Ils signifient que quelqu'un remplit un formulaire et appuie sur la touche retour alors qu'il se trouve dans un champ de texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X