Аз съм начинаещ програмист на JavaScript - това е първият ми проект на езика. В момента се опитвам да стартирам импровизиран "таймер", който се задейства при натискане на клавиш (keydown) и завършва, когато клавишът бъде освободен (keyup). За целите на тестването, аз също карам всяка функция да отпечатва израз всеки път, когато се задейства. За съжаление мога да накарам слушателя на събития да се задейства само веднъж. Искам скриптът да се изпълнява и да отговаря на въвеждане всеки път, когато потребителят натисне произволен клавиш. Честно казано, "таймерът" е контейнер за по-голям проект - това, което има значение, е да се изпълняват събитията за натискане на клавиши/клавиши всеки път, когато потребителят натисне клавиш, а не само при първоначалното натискане.
Вече опитах много различни тактики и ще продължа да проучвам проблема, докато чакам отговор. Първоначално подозирах, че проблемът е, защото зададох JavaScript в заглавната част на html документа, преди да се зареди, но преместването му в тялото не реши проблема. Притесних се, че е защото не пиша всеки път нов ред, но смяната на document.writeln не помогна. Опитах няколко прости форми на зацикляне на кода без успех - в момента проучвам как да направя функцията рекурсивна, за да видя дали това ще помогне. Също така се опитах да заредя кода в jquery без резултат (JQuery дори не се задейства веднъж). Също така свърших малко работа с неща като window.setInterval въз основа на изследванията, които направих за keylogging, но не разбирам напълно какво прави и нямах успех.
// The initial script
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var start, finish, diff;
// Adds event listeners
document.addEventListener('keydown',startTimer);
document.addEventListener('keyup',endTimer);
// Runs on keydown, simply stores a new date
function startTimer(e){
start = new Date();
}
// Runs on keyup, stores a new date (time in milliseconds since
epoch),
// then takes and prints the difference between the two.
function endTimer(e){
finish = new Date();
diff = finish - start;
document.write(diff);
}
</script>
</head>
<body>
</body>
</html>
// "Most stable" version, utilizing onkeyup/onkeydown and writeln
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
var start, finish, diff;
document.onkeydown = function(e){
start = new Date();
document.writeln(start);
}
document.onkeyup = function(e){
finish = new Date();
diff = finish - start;
document.writeln(finish);
document.writeln(diff);
}
</script>
</body>
</html>
// JQuery version
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="jquery-3.4.1.min.js">
var start, finish, diff;
$("q").keydown(function(){
start = new Date();
document.writeln(start);
});
$("w").keyup(function(){
finish = new Date();
diff = finish - start;
document.writeln(finish);
document.writeln(diff);
});
</script>
</body>
</html>
Очаквах "уебсайтът" да отпечатва точната съхранена дата всеки път, когато натисна клавиш, след което да отпечата нова дата, когато го пусна, и разликата между двете. Вместо това, когато за първи път натисна клавиш, той отпечатва информацията, след което не отпечатва нищо, независимо какво правя.
Ще отбележа, че JQuery понастоящем дори не отпечатва първото съобщение - правя повече проучвания за това защо - Направих само много леко проучване на JQuery.
Благодаря за помощта.
document.write
илиdocument.writeln
- използвайтеconsole.log
- и вероятно ще работи - person Jaromanda X   schedule 20.06.2019$('q').keydown
не добавя слушател на събития за ключаq
- той добавя слушател на събития надолу за елементи, чието име на етикет еq
... т.е. нищо във вашия HTML - person Jaromanda X   schedule 20.06.2019