2014-06-21 1 views
1

J'utilise une fonction pour afficher un div:Javascript onkeyup trop "lent"? .hide() fonctionne uniquement avec onkeydown

function showCMD() { 
$("#cmd").show("fast"); 
$('#cmdText').focus(); 
} 

Cela se produit, si l'utilisateur est en train de taper sur son clavier « cmd ».

Code principal:

document.onkeyup = function(event) { 

     //Save the last three keys 
     one = two; 
     two = three;   
     three = event.keyCode; 

     if (one == 67 && two == 77 && three == 68 && cmdOpen == false) { 
     showCMD(); 
     } 
      //if the pressed key is ENTER and the textarea is focused 
      if (event.keyCode == 13 && $("#cmdText").is(":focus") == true) { 
       //passing the code to another function 
       execCMD(document.getElementById("cmdText").value); 

       //empty the textarea - works great 
       document.getElementById("cmdText").value = ""; 
       return false; 
      } 

    } 

Le code tapé par l'utilisateur sera traité ici:

function execCMD(command) { 

    if(command == "exit") $("#cmd").hide("fast"); 
    console.log(command); 
} 
console

me donne chaque sortie de temps. Mais il ne cache pas le div # cmd. Si je change onkeyup à onkeydown, cela fonctionne très bien. Le problème avec onkeydown est que la zone de texte affiche le "d", après avoir ouvert la ligne de commande avec la séquence de touches "cmd". Donc, soit je ne peux pas fermer le # cmd ou il affiche un "d" chaque fois que j'ouvre le # cmd.

Last but not least le code html:

<div id="cmd"> 
    <textarea id="cmdText" maxlength="80"></textarea> 
</div> 

Peut-être que vous saurez une solution pour mon problème! Merci beaucoup

+0

Vous devez aussi être prudent avec l'utilisation de '==' et en '===' pour éviter la conversion de type. Voir cet article: http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons –

Répondre

1

Live demo

  • Vous devez trim() la commande, parce que quand vous tapez exit, la commande va stocker exit\n.

JS

function execCMD(command) { 
    if(command.trim() == "exit") // Add trim() 
     $("#cmd").hide("fast"); 
    console.log(command); 
} 

function showCMD() { 
    $("#cmd").show("fast"); 
    $('#cmdText').focus(); 
} 

document.onkeyup = function(event) { 

    //Save the last three keys 
    one = two; 
    two = three; 
    three = event.keyCode; // Change the order of declaration and definition 


    if (one == 67 && two == 77 && three == 68 && cmdOpen == false) { 
    showCMD(); 
    } 

    //if the pressed key is ENTER and the textarea is focused 
    if (event.keyCode == 13 && $("#cmdText").is(":focus") == true) { 
     //passing the code to another function 
     execCMD(document.getElementById("cmdText").value); 

     //empty the textarea - works great 
     document.getElementById("cmdText").value = ""; 
     return false; 
    } 

}

+1

Si je change l'ordre de l'un = deux etc, ça ne marche plus; mais le .trim(); commande aide. Maintenant tout fonctionne bien. Merci beaucoup – wernersbacher