2017-04-15 6 views
0

Il y a un texte d'entrée qui déclenche une fonction sur l'événement "onkeyup". Lorsque cette fonction se déclenche, je lie un événement "keyup" avec la méthode .on ("keyup") pour obtenir la dernière touche pressée pour savoir si elle était alphanumérique afin de déclencher la recherche ajax que je veux. Et après avoir fini, je délie la connexion avec la méthode .off ("keyup").JavaScript .on ("keyup")

Mais il y a un problème avec l'unbindation. Le problème est; Mon code s'exécute une fois et ne tourne pas pendant un tour, puis s'exécute à nouveau et ne fonctionne pas pour l'autre tour et continue comme ça. J'ai remplacé le code que je veux simplifier pour tester.

$("#arama").on("keyup",function(event) { 
 
     console.log("asd"); 
 
     $("#arama").off("keyup"); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="arama" />

Où suis-je trompé?

P.S: Je l'ai résolu grâce à Chris.

Répondre

0

Votre code fonctionne pour moi (voir ci-dessous). Peut-être vérifier où vous liez votre événement keyup. Il doit être lié une fois lorsque le document est chargé avant que la page ne s'affiche. Si vous le liez plusieurs fois (c'est-à-dire si le code qui contient votre fonction keyup s'exécute plusieurs fois), vous rencontrerez des problèmes.

$("#arama").on("keyup", function(event) { 
 
    var i = event.keyCode; 
 
    if ((i >= 48 && i <= 57) || (i >= 96 && i <= 105)) { 
 
    $("#arama").off("keyup"); 
 
    console.log("Number pressed. Stopping..."); 
 
    } else { 
 
    console.log("Non-number pressed."); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="arama" />

+0

Très bizarre, votre code exécute le journal pour une fois, même si je l'ai plusieurs fois écrit http://i.hizliresim.com/JazolQ.png –

+0

C'est parce qu'il est Dissocier l'événement 'keyup' après avoir tiré une fois. Vous pouvez définir une condition sur la commande '.off (" keyup ")' pour contrôler quand elle arrête l'exécution de la fonction parente. –

+0

Il me semble que vous m'avez mal compris. Voir ces 2 photos http://i.hizliresim.com/nRN8da.png http://i.hizliresim.com/GB48Av.png Sur la première image j'ai écrit 3 caractères et il n'a pas enregistré le 3ème caractère, Sur la deuxième image, j'ai écrit 4 caractères et comme il se connecte tous les deux caractères char Il est connecté les 3ème et 4ème caractères en même temps. Et je regarde si c'est alphanumérique pas simplement numérique C'est pour être sûr que ce n'est pas ctrl, alt ou smth –

0

Pas besoin de délier l'événement. Essayez cette

$("#arama").on("keyup",function(event) { 
    console.log("asd"); 
}); 
+0

Je dois effectivement le dissocier puisque je le déclare plusieurs fois quand la fonction parent se déclenche chaque fois que j'appuie sur une touche du texte d'entrée. Si je ne le délie pas, il continuera à se lier encore et encore et déclencher le code plusieurs fois. –

+0

pouvez-vous partager votre code complet? –