2015-10-13 2 views
0

Вот что я хочу в моем коде, если пользователь набрал письмо: это письмо не должно повторяться.Как я могу игнорировать повторное использование кода ключа?

В моем случае я использую код ключа и инструкцию if - else. Есть ли способ сделать это только одним нажатием клавиши, чтобы каждая буква одна раз?

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <style> 
 
    #Ans_container { 
 
     margin-left: 37%; 
 
     margin-bottom: 350px; 
 
     width: 400px; 
 
     height: 80px; 
 
     background-color: yellow; 
 
     font-size: 50px; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body onload="del();"> 
 
    <div id="Ans_container"></div> 
 
    <script> 
 
    function typing(x) { 
 

 
     if (x.keyCode == 65) { 
 
     document.getElementById("Ans_container").innerHTML += "A"; 
 
     } 
 
     if (x.keyCode == 66) { 
 
     document.getElementById("Ans_container").innerHTML += "B"; 
 
     } 
 
     if (x.keyCode == 67) { 
 
     document.getElementById("Ans_container").innerHTML += "C"; 
 
     } 
 
     if (x.keyCode == 68) { 
 
     document.getElementById("Ans_container").innerHTML += "D"; 
 
     } 
 
     if (x.keyCode == 69) { 
 
     document.getElementById("Ans_container").innerHTML += "E"; 
 
     } 
 
     if (x.keyCode == 70) { 
 
     document.getElementById("Ans_container").innerHTML += "F"; 
 
     } 
 
     if (x.keyCode == 71) { 
 
     document.getElementById("Ans_container").innerHTML += "G"; 
 
     } 
 
     if (x.keyCode == 72) { 
 
     document.getElementById("Ans_container").innerHTML += "H"; 
 
     } 
 
     if (x.keyCode == 73) { 
 
     document.getElementById("Ans_container").innerHTML += "I"; 
 
     } 
 
     if (x.keyCode == 74) { 
 
     document.getElementById("Ans_container").innerHTML += "J"; 
 
     } 
 
     if (x.keyCode == 75) { 
 
     document.getElementById("Ans_container").innerHTML += "K"; 
 
     } 
 
     if (x.keyCode == 76) { 
 
     document.getElementById("Ans_container").innerHTML += "L"; 
 
     } 
 
     if (x.keyCode == 77) { 
 
     document.getElementById("Ans_container").innerHTML += "M"; 
 
     } 
 
     if (x.keyCode == 78) { 
 
     document.getElementById("Ans_container").innerHTML += "N"; 
 
     } 
 
     if (x.keyCode == 79) { 
 
     document.getElementById("Ans_container").innerHTML += "O"; 
 
     } 
 
     if (x.keyCode == 80) { 
 
     document.getElementById("Ans_container").innerHTML += "P"; 
 
     } 
 
     if (x.keyCode == 81) { 
 
     document.getElementById("Ans_container").innerHTML += "Q"; 
 
     } 
 
     if (x.keyCode == 82) { 
 
     document.getElementById("Ans_container").innerHTML += "R"; 
 
     } 
 
     if (x.keyCode == 83) { 
 
     document.getElementById("Ans_container").innerHTML += "S"; 
 
     } 
 
     if (x.keyCode == 84) { 
 
     document.getElementById("Ans_container").innerHTML += "T"; 
 
     } 
 
     if (x.keyCode == 85) { 
 
     document.getElementById("Ans_container").innerHTML += "U"; 
 
     } 
 
     if (x.keyCode == 86) { 
 
     document.getElementById("Ans_container").innerHTML += "V"; 
 
     } 
 
     if (x.keyCode == 87) { 
 
     document.getElementById("Ans_container").innerHTML += "W"; 
 
     } 
 
     if (x.keyCode == 88) { 
 
     document.getElementById("Ans_container").innerHTML += "X"; 
 
     } 
 
     if (x.keyCode == 89) { 
 
     document.getElementById("Ans_container").innerHTML += "Y"; 
 
     } 
 
     if (x.keyCode == 90) { 
 
     document.getElementById("Ans_container").innerHTML += "Z"; 
 
     } 
 
    } 
 
    document.onkeydown = typing; 
 
    </script> 
 

 
</body> 
 

 
</html>

ответ

1

Вы можете сохранить список символов, которые уже "видели". Когда придет новый персонаж, проверьте, уже ли он в списке. Если нет, игнорируйте его.

Вы также можете сэкономить много цифр, используя String.fromCharCode() вместо 26 if операторов.

var seen = {}; 
 

 
function typing(x) { 
 
    if ((x.keyCode >= 65) && (x.keyCode <= 90)) { 
 
    var st = String.fromCharCode(x.keyCode); 
 

 
    if (!seen[st]) { 
 
     document.getElementById('Ans_container').innerHTML += st; 
 
     seen[st] = true; 
 
    } 
 
    } 
 
} 
 

 
document.onkeydown = typing;
#Ans_container { 
 
    margin-left: 37%; 
 
    margin-bottom: 350px; 
 
    width: 400px; 
 
    height: 80px; 
 
    background-color: yellow; 
 
    font-size: 50px; 
 
}
<div id="Ans_container"></div>

+0

Thx мат ИДК есть простой способ сделать это. Я беру на себя время, чтобы набрать все те, которые были бы в случае других слов – Kingsgame

0

Это может быть решение!

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <style> 
 
    #Ans_container { 
 
     margin-left: 37%; 
 
     margin-bottom: 350px; 
 
     width: 400px; 
 
     height: 80px; 
 
     background-color: yellow; 
 
     font-size: 50px; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body onload="del();"> 
 
    <div id="Ans_container"></div> 
 
    <script> 
 
    var Done = ' '; // the empty list of pressed keys 
 
    function typing(x) { 
 
     
 
     var curVal = String.fromCharCode(x.keyCode); 
 
      // we look the position of curVal in Done 
 
      // if it is not in (=== -1) we continue 
 
      //  |      
 
      //  |      if keyCode is between 64 and 91 
 
      //  |        we continue 
 
      //  |         | 
 
      //  v         v 
 
     if (Done.indexOf(curVal)===-1 && (x.keyCode > 64 && x.keyCode < 91)) { 
 
      document.getElementById("Ans_container").innerHTML += curVal; 
 
      Done += curVal + ' '; // we add curVal in the list of pressed keys. 
 
     } 
 
    } 
 
    document.onkeydown = typing; 
 
    </script> 
 

 
</body> 
 

 
</html>

0

Абсолютная Проще всего было бы изменить eventListener от document.onkeydown к document.onkeyup. Проблема, с которой вы сталкиваетесь, заключается в том, что когда пользователь удерживает ключ, ваш слушатель событий запускается для каждого цикла дайджеста DOM. Слушатель document.onkeyup - это самый простой способ отделить вас от этой простой ошибки. Если вы хотите еще больше предотвратить повторение символов, я бы предположил, что вы используете очень простой ответ @ PaulRoub.

В то время как ответ @ PaulRoub решит вашу проблему в одиночку, простое изменение, которое я предлагаю, значительно увеличит вашу производительность, и я считаю, что это абсолютно необходимо.

Я также предлагаю изменить прослушиватель событий на document.addEventListener('keyup', typing, true), так как теперь он является стандартным методом подключения слушателей событий и не переоценивает атрибут documentsonkeyup.

Я снял сниппп @ PaulRoub и применил к нему свои изменения.

var seen = {}; 
 

 
function typing(x) { 
 
    if ((x.keyCode >= 65) && (x.keyCode <= 90)) { 
 
    var st = String.fromCharCode(x.keyCode); 
 

 
    if (!seen[st]) { 
 
     document.getElementById('Ans_container').innerHTML += st; 
 
     seen[st] = true; 
 
    } 
 
    } 
 
} 
 

 
document.addEventListener('keyup', typing, true);
#Ans_container { 
 
    margin-left: 37%; 
 
    margin-bottom: 350px; 
 
    width: 400px; 
 
    height: 80px; 
 
    background-color: yellow; 
 
    font-size: 50px; 
 
}
<div id="Ans_container"></div>

+0

thx для подсказок – Kingsgame

Смежные вопросы