577 votes

Peut-on faire en sorte qu'un <bouton>ne soumette pas un formulaire ?

J'ai un formulaire, avec 2 boutons

<a href="index.html"><button>Cancel changes</button></a>

<button type="submit">Submit</button>

J'utilise aussi le bouton de jQuery UI sur eux, simplement comme ceci

$('button').button();

Cependant, le premier bouton permet également de soumettre le formulaire. J'aurais pensé que s'il n'y avait pas l'option type="submit" ce n'est pas le cas.

Je pourrais évidemment faire ça

$('button[type!=submit]').click(function(event) { event.stopPropagation(); });

Mais existe-t-il un moyen d'empêcher ce bouton retour de soumettre le formulaire sans intervention de JavaScript ?

Pour être honnête, j'ai utilisé un bouton uniquement pour pouvoir le styliser avec jQuery UI. J'ai essayé d'appeler button() sur le lien et cela n'a pas fonctionné comme prévu (c'était plutôt moche !).

0 votes

5 votes

Utilice <button type="button"> pour celui qui ne soumet pas le formulaire et <input type="submit"> pour l'autre. Puis attrapez-le avec jquery $('#formID').submit(function(e){});

1278voto

Josh Lee Points 53741

La valeur par défaut de l'option type l'attribut de button éléments es "soumettre". Réglez-le sur type="button" pour produire un bouton qui ne soumet pas le formulaire.

<button type="button">Submit</button>

Selon les termes de la Norme HTML : "Ne fait rien."

70 votes

C'est juste un choix de conception scandaleusement mauvais.

1 votes

Tout le monde : S'il vous plaît, lisez html.spec.whatwg.org/multipage/syntaxe.html#unquoted

2 votes

Wow, toi et Alex étiez vraiment en train de vous battre dans les révisions. Je ne vois pas pourquoi l'un de vous se soucie des citations ou non sur un attribut.

233voto

Sidnicious Points 15187

El button élément a un type par défaut de submit .

Vous pouvez faire en sorte qu'il ne fasse rien en fixant un type de button :

<button type="button">Cancel changes</button>

1 votes

@B.ClayShannon Pas vraiment. Vous pourriez utiliser du code côté serveur pour renvoyer la même page lorsque le bouton est cliqué, mais cela rechargera toujours la page. En fin de compte, le bouton fait partie du document et les seuls moyens d'indiquer au navigateur comment vous voulez qu'il agisse sont le HTML et le JavaScript.

19voto

Jeffrey Blake Points 4995

Utilisez simplement le bon vieux HTML :

<input type="button" value="Submit" />

Enveloppez-le comme sujet d'un lien, si vous le désirez :

<a href="http://somewhere.com"><input type="button" value="Submit" /></a>

Ou si vous décidez que vous voulez que le javascript fournisse une autre fonctionnalité :

<input type="button" value="Cancel" onclick="javascript: someFunctionThatCouldIncludeRedirect();"/>

7 votes

L'utilisation d'un contrôle de bouton standard avec un attribut de type approprié est du "bon vieux html" et crée un balisage beaucoup plus simple.

0 votes

Il est clair que ce n'est pas plus simple si dans certains navigateurs, il y a un type de soumission par défaut et dans d'autres, un type de bouton par défaut. En fait, le simple fait d'avoir un type de bouton par défaut complique les choses plus que nécessaire. Il devrait y avoir des balises qui fournissent facilement un bouton qui ne fait rien. Et c'est le cas : <input type="button" />

0 votes

+1 J'ai utilisé cette technique exacte de nombreuses fois, et elle a toujours bien fonctionné pour moi. Une variante est que si vous avez besoin d'annuler l'événement postback pour un bouton côté serveur basé sur un calcul côté client, vous pouvez inclure window.event.returnValue = false ; dans votre code qui s'exécute dans l'événement onclick côté client pour votre bouton... c'est-à-dire, si l'utilisation d'un contrôle de validateur personnalisé ne vous convient pas :)

7voto

zzjove Points 177
<form onsubmit="return false;">
   ...
</form>

0 votes

Votre réponse désactive tous les moyens traditionnels de soumettre le formulaire, pas seulement un bouton. La question de l'OP concernait plutôt la désactivation de certains boutons, tout en conservant la possibilité de soumettre le formulaire.

5voto

Tim Points 1088

Honnêtement, j'aime les autres réponses. C'est facile et il n'est pas nécessaire d'entrer dans JS. Mais j'ai remarqué que votre question portait sur JQuery. Donc, pour être complet, en jQuery, si vous renvoyez false avec le gestionnaire .click(), cela annulera l'action par défaut du widget.

Voir ici pour un exemple (et d'autres goodies, aussi). Voici également la documentation .

en bref, avec votre exemple de code, faites ceci :

<script type="text/javascript">
    $('button[type!=submit]').click(function(){
        // code to cancel changes
        return false;
    });
</script>

<a href="index.html"><button>Cancel changes</button></a>
<button type="submit">Submit</button>

En outre, vous pouvez vous débarrasser de la balise d'ancrage et utiliser simplement le bouton.

0 votes

Curieusement, en ajoutant e.preventDefault() ne fait rien pour arrêter la soumission (où elle commence avec function(e) ).

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