formulaire sans action et où entrer ne recharge pas la page

94

Je recherche la meilleure façon de créer un formulaire HTML qui n'a pas de bouton d'envoi. Cela en soi est assez simple, mais je dois également empêcher le formulaire de se recharger lorsque des tâches de type soumission sont effectuées (par exemple, frapper Enterdans un champ de texte).

Matt Roberts
la source
Voulez-vous qu'il ne se soumette jamais?
UpTheCreek
Si vous avez juste un <form> avec un seul <input> qui est un champ de texte qu'il ne devrait pas soumettre lorsque vous appuyez sur Entrée, n'est-ce pas?
Zack The Human
Je veux qu'il se soumette à une autre condition (en fait en appuyant sur un certain bouton). Le problème est que je n'ai pas réussi à obtenir le comportement «entrer dans le champ de texte» pour publier / accéder à la même URL. Donc, mon formulaire soigneusement créé, où vous devez faire X, Y et Z pour le soumettre, peut être soumis par erreur par l'utilisateur qui appuie sur Entrée.
Matt Roberts

Réponses:

44

Ajoutez un gestionnaire onsubmit au formulaire (soit via plain js ou jquery $ (). Submit (fn)), et renvoyez false sauf si vos conditions spécifiques sont remplies.

À moins que vous ne souhaitiez que le formulaire soit soumis, jamais - auquel cas, pourquoi ne pas simplement omettre l'attribut «action» sur l'élément de formulaire?

K Prime
la source
150
Un formulaire sans actionattribut n'est pas un formulaire, selon les normes - et provoquera en fait un rechargement de page dans certains navigateurs .. J'ai trouvé que cela action="javascript:void(0);"fonctionne bien.
Dutchie432
La réponse des Hollandais fonctionne parfaitement. Firefox était juste en train de rafraîchir la page.
IAmGroot
1
@ Dutchie432 devrait en faire une réponse au lieu d'un commentaire. Ensuite, il ferait son chemin vers le sommet où il appartient. Alternativement, KPrime pourrait ajuster sa réponse, car omettre l'action ne fonctionnait pas pour moi ...
sage
211

Vous voudrez l'inclure action="javascript:void(0);"dans votre formulaire pour empêcher les recharges de page et maintenir la norme HTML.

Dutchie432
la source
4
Je viens de passer 2 jours à essayer de supprimer l'action par défaut du bouton d'envoi lorsque vous appuyez sur Entrée, car bien que l'action ait eu lieu, la page a fini par se recharger (Firefox). L'ajout du javascript void comme action sur le formulaire l'a corrigé. Merci pour ça.
Tony Payne
merci pour cette réponse supplémentaire. cela fonctionne toujours - mais est-ce toujours la solution «à la pointe de la technologie» en 2016?
low_rents
1
@low_rents Je l'utilise toujours tout le temps et je n'ai pas personnellement trouvé de meilleure solution.
Dutchie432
1
Merci pour la solution précise et géniale pour résoudre le rechargement de page en appuyant sur la touche Entrée :) Meilleure solution.
Imran Rafiq plutôt le
9

Ajoutez simplement cet événement à votre champ de texte. Cela empêchera une soumission en appuyant sur Entrée, et vous êtes libre d'ajouter un bouton d'envoi ou un formulaire d'appel.submit () si nécessaire:

onKeyPress="if (event.which == 13) return false;"

Par exemple:

<input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input>
GenericMeatUnit
la source
1
Merci pour ça. Je crains que la clarté de votre réponse n'ait montré clairement l'exactitude d'une réponse antérieure afin que vous n'obteniez pas la réponse acceptée, mais vous obtenez ma gratitude et un vote favorable!
Matt Roberts
2
Je vous remercie. Heureux de vous aider. De toute façon, je n'ai jamais été un des vedettes. ;)
GenericMeatUnit
5

Lorsque vous appuyez sur Entrée dans un formulaire, le comportement naturel du formulaire est d'être soumis, pour arrêter ce comportement qui n'est pas naturel, vous devez l'empêcher de soumettre (comportement par défaut), avec jquery:

$("#yourFormId").on("submit",function(event){event.preventDefault()})
jsDevia
la source
4

une idée:

<form method="POST" action="javascript:void(0);" onSubmit="CheckPassword()">
    <input id="pwset" type="text" size="20" name='pwuser'><br><br>
    <button type="button" onclick="CheckPassword()">Next</button>
</form>

et

<script type="text/javascript">
    $("#pwset").focus();
    function CheckPassword()
    {
        inputtxt = $("#pwset").val();
        //and now your code
        $("#div1").load("next.php #div2");
        return false;
    }
</script>
Tom Nobleman
la source
1

Deux façons de résoudre:

  1. la valeur d'action du formulaire est "javascript: void (0);".
  2. ajoutez un écouteur d'événement de pression de touche pour le formulaire pour empêcher la soumission.
facture
la source
L'écoute d'un événement de pression sur une touche (par exemple, la touche Entrée) peut vous textareaposer des problèmes avec s, et éventuellement la sélection de la saisie semi-automatique ou des listes déroulantes, et le mobile peut être une autre source de problèmes.
luckydonald
0

La première réponse est la meilleure solution:

Ajoutez un gestionnaire onsubmit au formulaire (soit via plain js ou jquery $ (). Submit (fn)), et renvoyez false sauf si vos conditions spécifiques sont remplies.

Plus spécifique avec jquery:

$('#your-form-id').submit(function(){return false;});

À moins que vous ne souhaitiez que le formulaire soit soumis, jamais - auquel cas, pourquoi ne pas simplement omettre l'attribut «action» sur l'élément de formulaire?

L'écriture d'extensions Chrome est un exemple où vous pouvez avoir un formulaire de saisie utilisateur, mais vous ne souhaitez pas qu'il soit envoyé. Si vous utilisez action = "javascript: void (0);", le code fonctionnera probablement mais vous vous retrouverez avec ce problème où vous obtenez une erreur concernant l'exécution de Javascript en ligne.

Si vous omettez complètement l'action, le formulaire se rechargera, ce qui est également indésirable dans certains cas lors de l'écriture d'une extension Chrome. Ou si vous aviez une page Web avec une sorte de calculatrice intégrée, où l'utilisateur fournirait une entrée et cliquez sur "Calculer" ou quelque chose comme ça.

Skelliam
la source