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

j'ai un form avec deux boîtes de texte, une sélectionner déposer et un bouton radio . Quand la touche entre est pressée, je veux appeler une fonction javascript (définie par L'utilisateur), mais quand je l'appuie, le formulaire est soumis.

Comment puis-je empêcher la form d'être soumise lorsque la touche entrer est pressée?

247
demandé sur Gibolt 2009-05-25 07:31:28

14 réponses

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

OK, alors imaginez que vous ayez la boîte de texte suivante dans une forme:

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

afin d'exécuter un script" défini par l'utilisateur "à partir de cette zone de texte lorsque la touche entrée est pressée, et ne pas le faire soumettre le formulaire, voici un certain code sample . Veuillez noter que cette fonction ne fait pas de vérification d'erreur et ne fonctionnera probablement que dans IE. Pour ce faire, vous avez besoin d'une solution plus robuste, mais vous obtiendrez l'idée générale.

function runScript(e) {
    //See notes about 'which' and 'key'
    if (e.keyCode == 13) {
        var tb = document.getElementById("scriptBox");
        eval(tb.value);
        return false;
    }
}

retourner la valeur de la fonction avertira le gestionnaire d'événements de ne pas faire de bulles sur l'événement plus loin, et empêchera l'événement de keypress d'être manipulé plus loin.

NOTE:

il a été souligné que keyCode est maintenant déprécié . La meilleure alternative suivante which a également été déprécié .

malheureusement le standard favorisé key , qui est largement soutenu par les navigateurs modernes, a quelque comportement douteux dans IE et Edge . Tout ce qui est plus ancien que IE11 aurait encore besoin d'un polyfill .

en outre, alors que l'avertissement déprécié est assez sinistre au sujet de keyCode et which , enlever ceux-ci représenterait un changement de rupture massive à un nombre incalculable de sites Web d'héritage. Pour cette raison, il est peu probable qu'ils allez n'importe où n'importe quand bientôt.

360
répondu Josh 2018-05-18 18:05:44

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

function (event) {
    if (event.which == 13 || event.keyCode == 13) {
        //code to execute here
        return false;
    }
    return true;
};
106
répondu Agiagnoc 2015-04-09 05:50:35

si vous utilisez jQuery:

$('input[type=text]').on('keydown', function(e) {
    if (e.which == 13) {
        e.preventDefault();
    }
});
65
répondu cowboy 2016-01-06 18:14:38

de l'événement.clé = = = "Enter "

plus récent et beaucoup plus propre: utiliser event.key . plus de codes de nombres arbitraires!

const node = document.getElementsByClassName(".mySelect")[0];
node.addEventListener("keydown", function(event) {
    if (event.key === "Enter") {
        event.preventDefault();
        // Do more work
    }
});

Mozilla Docs

Navigateurs Pris En Charge

33
répondu Gibolt 2018-01-19 19:02:04

outrepasser l'action onsubmit du formulaire pour être un appel à votre fonction et ajouter retour false après elle, c'est à dire:

<form onsubmit="javascript:myfunc();return false;" >
17
répondu rpkelly 2012-06-25 04:14:28

détecter entrer la touche pressée sur le document entier:

$(document).keypress(function (e) {
    if (e.which == 13) {
        alert('enter key is pressed');
    }
});

http://jsfiddle.net/umerqureshi/dcjsa08n/3 /

17
répondu umer 2015-06-16 05:58:33

réagir js solution

 handleChange: function(e) {
    if (e.key == 'Enter') {
      console.log('test');
    }


 <div>
    <Input type="text"
       ref = "input"
       placeholder="hiya"
       onKeyPress={this.handleChange}
    />
 </div>
13
répondu caffeinescript 2016-01-08 07:15:38

ci-dessous le code ajoutera l'auditeur pour la touche ENTER sur toute la page.

cela peut être très utile dans les écrans avec un seul bouton D'Action par exemple Se connecter, S'enregistrer, soumettre, etc.

<head>
        <!--Import jQuery IMPORTANT -->
        <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>

         <!--Listen to Enter key event-->
        <script type="text/javascript">

            $(document).keypress(function (e) {
                if (e.which == 13 || event.keyCode == 13) {
                    alert('enter key is pressed');
                }
            });
        </script>
    </head>

Testé sur tous les navigateurs.

5
répondu Hitesh Sahu 2016-12-14 07:40:15

une solution jQuery.

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

$(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();
});

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

3
répondu chim 2015-05-13 16:27:17

une façon beaucoup plus simple et efficace de mon point de vue devrait être :

function onPress_ENTER()
{
        var keyPressed = event.keyCode || event.which;

        //if ENTER is pressed
        if(keyPressed==13)
        {
            alert('enter pressed');
            keyPressed=null;
        }
        else
        {
            return false;
        }
}
2
répondu Thanos 2015-06-07 11:07:37

en utilisant le code typographique, et éviter les appels multiples sur la fonction

let el1= <HTMLInputElement>document.getElementById('searchUser');
el1.onkeypress = SearchListEnter;

function SearchListEnter(event: KeyboardEvent) {
    if (event.which !== 13) {
        return;
    }
    // more stuff
}
2
répondu Wagner Pereira 2018-03-14 21:18:12
<div class="nav-search" id="nav-search">
        <form class="form-search">
            <span class="input-icon">
                <input type="text" placeholder="Search ..." class="nav-search-input" id="search_value" autocomplete="off" />
                <i class="ace-icon fa fa-search nav-search-icon"></i>
            </span>
            <input type="button" id="search" value="Search" class="btn btn-xs" style="border-radius: 5px;">
        </form>

</div>

<script type="text/javascript">
    $("#search_value").on('keydown', function(e) {
        if (e.which == 13) {
             $("#search").trigger('click');
            return false;
        }
    });
    $("#search").on('click',function(){
        alert('You press enter');
    });
</script>
0
répondu Mizanur Rahaman 2017-08-28 04:41:38

native js (fetch api)

document.onload = (() => {
    alert('ok');
    let keyListener = document.querySelector('#searchUser');
    // 
    keyListener.addEventListener('keypress', (e) => {
        if(e.keyCode === 13){
            let username = e.target.value;
            console.log(`username = ${username}`);
            fetch(`https://api.github.com/users/${username}`,{
                data: {
                    client_id: 'xxx',
                    client_secret: 'xxx'
                }
            })
            .then((user)=>{
                console.log(`user = ${user}`);
            });
            fetch(`https://api.github.com/users/${username}/repos`,{
                data: {
                    client_id: 'xxx',
                    client_secret: 'xxx'
                }
            })
            .then((repos)=>{
                console.log(`repos = ${repos}`);
                for (let i = 0; i < repos.length; i++) {
                     console.log(`repos ${i}  = ${repos[i]}`);
                }
            });
        }else{
            console.log(`e.keyCode = ${e.keyCode}`);
        }
    });
})();
<input _ngcontent-inf-0="" class="form-control" id="searchUser" placeholder="Github username..." type="text">
0
répondu xgqfrms 2018-05-28 13:02:23

si vous voulez le faire en utilisant purly java script voici un exemple qui fonctionne parfaitement

disons que c'est votre fichier html

<!DOCTYPE html>
<html>
  <body style="width: 500px">
    <input type="text" id="textSearch"/> 
      <script type="text/javascript" src="public/js/popup.js"></script>
  </body>
</html>

dans votre popup .js fichier il suffit d'utiliser cette fonction

var input = document.getElementById("textSearch");
input.addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        alert("yes it works,I'm happy ");
    }
});
0
répondu ZINA TAKLIT 2018-06-16 23:04:39