jquery désactiver soumettre le formulaire sur entrée

j'ai le javascript suivant dans ma page qui ne semble pas fonctionner.

$('form').bind("keypress", function(e) {
  if (e.keyCode == 13) {               
    e.preventDefault();
    return false;
  }
});

j'aimerais désactiver la soumission du formulaire sur enter, ou mieux encore, appeler mon formulaire ajax submit. L'une ou l'autre solution est acceptable, mais le code que j'inclus ci-dessus n'empêche pas le formulaire de soumettre.

173
demandé sur zessx 2012-06-28 02:23:02

16 réponses

si keyCode n'est pas capturé, prendre which :

$('#formid').on('keyup keypress', function(e) {
  var keyCode = e.keyCode || e.which;
  if (keyCode === 13) { 
    e.preventDefault();
    return false;
  }
});

EDIT: raté, il est préférable d'utiliser des keyup au lieu de keypress

EDIT 2: comme dans certaines versions plus récentes de Firefox la soumission du formulaire n'est pas empêchée, il est plus sûr d'ajouter l'événement keypress au formulaire. Aussi il ne fonctionne pas (plus?) en liant simplement l'événement au formulaire "nom" mais seulement à l'id du formulaire. C'est pourquoi j'ai rendu cela plus évident en modifier l'exemple de code de manière appropriée.

EDIT 3: modification de la bind() à on()

359
répondu zessx 2016-01-30 18:34:37

habituellement, le formulaire est soumis sur entrer lorsque vous avez mis l'accent sur les éléments d'entrée.

Nous pouvons désactiver Entrée (code 13 ) sur l'entrée des éléments dans un formulaire:

$('form input').on('keypress', function(e) {
    return e.which !== 13;
});

DEMO: http://jsfiddle.net/bnx96/325 /

51
répondu VisioN 2015-10-05 15:08:28

encore plus court:

$('myform').submit(function() {
  return false;
});
39
répondu user1017926 2012-12-07 20:41:16
$('form').keyup(function(e) {
  return e.which !== 13  
});

l'événement .quelle propriété normalise l'événement.mot de code et de l'événement.charCode. Il est recommandé de regarder de l'événement.qui pour l'entrée de la touche de clavier.

which docs.

23
répondu gdoron 2012-06-27 22:35:44
$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
  if(e.which == 13) {
    e.preventDefault();
    return false;
  }
});

cette solution fonctionne sur tous les formulaires sur le site web (également sur les formulaires insérés avec ajax), empêchant seulement les entrées dans les textes d'entrée. Placez - le dans une fonction de prêt de document, et oubliez ce problème pour une vie.

13
répondu Buzogany Laszlo 2014-05-30 12:32:33

le surmenage de devoir capturer et tester chaque touche pour la touche ENTER me dérange vraiment, donc ma solution repose sur le comportement de navigateur suivant:

appuyer sur ENTER déclenchera un cliquer sur sur le bouton Soumettre (testé dans IE11, Chrome 38, FF 31) ** (réf: http://mattsnider.com/how-forms-submit-when-pressing-enter / )

donc ma solution est de supprimer le bouton de soumission standard (i.e. <input type="submit"> ) de sorte que le comportement ci-dessus échoue parce qu'il n'y a pas de bouton de soumission pour faire un clic magique quand ENTER est pressé. Au lieu de cela, j'utilise un jQuery click handler sur un bouton régulier pour soumettre le formulaire via la méthode .submit() de jQuery.

<form id="myform" method="post">
  <input name="fav_color" type="text">
  <input name="fav_color_2" type="text">
<button type="button" id="form-button-submit">DO IT!</button>
</form>

<script>
 $('#form-button-submit').click(function(){
    $('#myform').submit();
  });
</script>

Démo: http://codepen.io/anon/pen/fxeyv?editors=101

** ce comportement n'est pas applicable si le formulaire a seulement 1 champ de saisie et que le champ est une entrée "texte"; dans ce cas, le formulaire sera soumis avec la touche ENTER, même si aucun bouton Soumettre N'est présent dans le balisage HTML (par exemple, un champ de recherche). C'est le comportement standard du navigateur depuis les années 90.

7
répondu Costa 2015-12-15 21:31:29

la plupart des réponses ci-dessus empêcheront les utilisateurs d'ajouter de nouvelles lignes dans un champ textarea. Si c'est quelque chose que vous voulez éviter, vous pouvez exclure ce cas particulier en vérifiant quel élément a actuellement focus:

var keyCode = e.keyCode || e.which;
if (keyCode === 13 && !$(document.activeElement).is('textarea')) {
  e.preventDefault();
  return false;
}
5
répondu jean-baptiste 2016-07-26 15:08:50

si vous voulez juste désactiver soumettre sur le bouton enter and submit too utiliser l'événement onsubmit du formulaire

<form onsubmit="return false;">

vous pouvez remplacer" return false " par appel à la fonction JS qui fera tout ce qui est nécessaire et aussi soumettre le formulaire comme une dernière étape.

3
répondu Perica Zivkovic 2014-07-01 19:48:38

Je ne sais pas si vous avez déjà résolu ce problème, ou quelqu'un qui essaie de le résoudre maintenant, Mais, voici ma solution pour cela!

$j(':input:not(textarea)').keydown(function(event){
    var kc = event.witch || event.keyCode;
    if(kc == 13){
    event.preventDefault();
        $j(this).closest('form').attr('data-oldaction', function(){
            return $(this).attr('action');
        }).attr('action', 'javascript:;');

        alert('some_text_if_you_want');

        $j(this).closest('form').attr('action', function(){
            return $(this).attr('data-oldaction');
        });
        return false;
    }
});
3
répondu Don Marcony Neves 2014-07-17 17:51:56

vous pouvez le faire parfaitement en Javascript pur, simple et sans Bibliothèque nécessaire. Voici ma réponse détaillée pour un sujet similaire: désactiver entrer la clé pour le formulaire

en bref, voici le code:

<script type="text/javascript">
window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+000A'||e.keyIdentifier=='Enter'||e.keyCode==13){if(e.target.nodeName=='INPUT'&&e.target.type=='text'){e.preventDefault();return false;}}},true);
</script>

ce code sert à empêcher la touche" Enter "pour le type d'entrée= "text" seulement. (Parce que le visiteur pourrait avoir besoin de frapper enter à travers la page) si vous voulez désactiver "Enter" pour d'autres actions aussi bien, vous pouvez ajouter console.log (e); pour vos besoins de test, et appuyez sur F12 dans chrome, allez dans l'onglet "console" et appuyez sur "backspace" sur la page et regardez à l'intérieur pour voir quelles valeurs sont retournées, puis vous pouvez cibler tous ces paramètres pour améliorer le code ci-dessus pour répondre à vos besoins pour "E. cible.nodeName" , "E. cible.tapez" et beaucoup plus...

3
répondu Tarik 2017-05-23 12:03:02

le code suivant annulera l'utilisation de la touche enter pour soumettre un formulaire, mais vous permettra tout de même d'utiliser la touche enter dans un texte. Vous pouvez le modifier en fonction de vos besoins.

<script type="text/javascript">
        function stopRKey(evt) {
          var evt = (evt) ? evt : ((event) ? event : null);
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
          if ((evt.keyCode == 13) && ((node.type=="text") || (node.type=="radio") || (node.type=="checkbox")) )  {return false;}
        }

        document.onkeypress = stopRKey;
</script> 
1
répondu Radish 2013-10-11 17:48:53

dans firefox, quand vous à l'entrée et appuyez sur Entrée, il soumettra sa forme supérieure. La solution est dans le formulaire de soumission de testament ajouter ceci:

<input type="submit" onclick="return false;" style="display:none" />
1
répondu wade 2014-08-25 05:53:44

3 ans plus tard et pas une seule personne n'a répondu complètement à cette question.

l'asker veut annuler la soumission du formulaire par défaut et appeler son propre Ajax. C'est une requête simple avec une solution simple. Il n'est pas nécessaire d'intercepter chaque caractère entré dans chaque entrée.

en supposant que le formulaire a un bouton Soumettre, si un <button id="save-form"> ou un <input id="save-form" type="submit"> , faire:

$("#save-form").on("click", function () {
    $.ajax({
        ...
    });
    return false;
});
1
répondu derekm 2015-08-26 14:21:01

lorsque le fichier est terminé (load complete), le script détecte chaque événement pour la touche "Entry" et il désactive l'événement derrière.

<script>
            $(document).ready(function () {
                $(window).keydown(function(event){
                    if(event.keyCode == 13) {
                        e.preventDefault(); // Disable the " Entry " key
                        return false;               
                    }
                });
            });
        </script>
0
répondu McNavy 2016-09-22 07:28:08

solution complète en JavaScript pour tous les navigateurs

le code ci-dessus et la plupart des solutions sont parfaites. Cependant, je pense que le plus aimé une "réponse courte" qui est incomplète.

alors voici la réponse complète. en JavaScript avec le Support natif pour IE 7 aussi bien.

var form = document.getElementById("testForm");
form.addEventListener("submit",function(e){e.preventDefault(); return false;});

Cette solution va maintenant empêcher l'utilisateur de soumettre en utilisant la touche enter et ne sera pas recharger la page, ou vous emmener au haut de la page, si votre formulaire est quelque part ci-dessous.

-2
répondu Tarandeep Singh 2017-05-26 16:37:49

Que pensez-vous de ceci:

$(":submit").closest("form").submit(function(){
    $(':submit').attr('disabled', 'disabled');
});

ceci devrait désactiver tous les formulaires avec des boutons soumettre dans votre application.

-9
répondu Shreekar Patel 2013-02-14 15:51:49