Я начинающий программист на JavaScript — это мой первый проект на языке. В настоящее время я пытаюсь запустить импровизированный «таймер», который срабатывает при нажатии клавиши (нажатие клавиши) и заканчивается при отпускании клавиши (нажатие клавиши). В целях тестирования я также заставляю каждую функцию выводить оператор всякий раз, когда они срабатывают. К сожалению, я могу заставить прослушиватель событий запускаться только один раз. Я хочу, чтобы скрипт запускался и реагировал на ввод всякий раз, когда пользователь нажимает любую клавишу. Честно говоря, «таймер» — это заполнитель для более крупного проекта: важно, чтобы события keydown/keyup запускались каждый раз, когда пользователь нажимает клавишу, а не только при первом нажатии.
Я уже пробовал много разных тактик, и я продолжу исследовать проблему, пока жду ответа. Сначала я подозревал, что проблема в том, что я установил JavaScript в заголовке html-документа до его загрузки, но перемещение его в тело не решило проблему. Я беспокоился, что это из-за того, что я не писал каждый раз новую строку, но изменение на document.writeln не помогло. Я безуспешно пробовал несколько простых форм зацикливания кода. В настоящее время я изучаю, как сделать функцию рекурсивной, чтобы посмотреть, поможет ли это. Я также пытался загрузить код в jquery безрезультатно (JQuery даже не запускается один раз). Я также немного поработал с такими вещами, как window.setInterval, на основе исследования, которое я провел по кейлоггингу, но я не полностью понимаю, что он делает, и не добился успеха.
// 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
- он добавляет прослушиватель событий keydown для элементов, имя тега которыхq
... т.е. ничего в вашем HTML - person Jaromanda X   schedule 20.06.2019