368 votes

Entrer l'événement de presse clé en JavaScript

J'ai form avec deux zones de texte, une liste déroulante , sélectionnez et un bouton radio. Lorsque la touche Entrée est enfoncée, je souhaite appeler une fonction javascript (définie par l'utilisateur), mais lorsque j'appuie dessus, le formulaire est envoyé.

Comment puis-je empêcher le form d'être soumis lorsque la touche Entrée est enfoncée?

463voto

Josh Points 23923
if(characterCode == 13)
{
    return false; // returning false will prevent the event from bubbling up.
}
else
{
    return true;
}

Ok, alors imaginez, vous avez la zone de texte dans un formulaire:

<input id="scriptBox" type="text" onkeypress="return runScript(event)" />

Afin d'exécuter certains "défini par l'utilisateur" script à partir de cette zone de texte lorsque la touche entrée est pressée, et de ne pas l'avoir soumis le formulaire, voici quelques exemple de code. Veuillez noter que cette fonction ne fait pas de vérification d'erreur et le plus probable, ne fonctionne que sur IE. À faire de ce droit, vous avez besoin d'une solution plus robuste, mais vous aurez une idée générale.

function runScript(e) {
    if (e.keyCode == 13) {
        var tb = document.getElementById("scriptBox");
        eval(tb.value);
        return false;
    }
}

retour de la valeur de la fonction alerter le gestionnaire d'événement à ne pas la bulle de l'événement, et de prévenir l'événement keypress d'être traités plus loin.

141voto

Agiagnoc Points 299

Utilisez à la fois event.which et event.keyCode :

    function (event) {
        if (event.which == 13 || event.keyCode == 13) {
            //code to execute here
            return false;
        }
        return true;
    });
 

81voto

cowboy Points 206

Si vous utilisez jQuery:

 $('input[type=text]').on('keyup', function(e) {
    if (e.which == 13) {
        e.preventDefault();
    }
});
 

18voto

rpkelly Points 977

Remplacez l'action onsubmit du formulaire comme étant un appel à votre fonction et ajoutez return false après, par exemple:

 <form onsubmit="javascript:myfunc();return false;" >
 

3voto

chim Points 1799

Une solution jQuery.

Je suis venu ici à la recherche d'un moyen de retarder la soumission du formulaire jusqu'à ce que l'événement de flou sur la saisie de texte ait été déclenché.

 $(selector).keyup(function(e){
  /*
   * Delay the enter key form submit till after the hidden
   * input is updated.
   */

  // No need to do anything if it's not the enter key
  // Also only e.which is needed as this is the jQuery event object.
  if (e.which != 13) {
       return;
  }

  // Prevent form submit
  e.preventDefault();

  // Trigger the blur event.
  this.blur();

  // Submit the form.
  $(e.target).closest('form').submit();
});
 

Ce serait bien d'avoir une version plus générale qui a déclenché tous les événements retardés plutôt que de simplement soumettre le formulaire.

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