Почему клавиша ENTER отпускает ожидание?

Кнопка выполняет функцию «разрешить» и отпускает ожидание, как и ожидалось.
Но затем клавиша ENTER также отменяет ожидание. Что происходит?

<html>
  <head>
    <title> Q:await </title>
    <meta charset = "utf-8">
    <script>
  "use strict";
  let fnresolve, n=0; // globals
window.onload = function() {
  zlog('Hit the button, then the ENTER key');
  zlog();
  Main();
}
async function Main() {
  do {
    zlog('before wait', ++n);    
    let pMain = new Promise((res) => { fnresolve = res; } ); // save the res function
    await pMain;
    zlog('after wait', n); zlog('');    
  } while (1);
}
function zlog() {
  document.getElementById('zlog').innerHTML += (Object.values(arguments).join(', ')) + '<br />';
}
    </script>
  </head>
  <body>
  <button onclick='fnresolve();'> fnresolve </button>
  <div id='zlog'></div>  
  </body>
</html>

Обновлено: Ответ и комментарии вдохновили на исправление:

<button onclick='fnresolve();this.blur();'> fnresolve </button>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

<button> элемент. В типичном HTML-документе нажатие клавиши "ENTER" может активировать первую кнопку на странице, как если бы она была нажата. Поскольку ваша функция fnresolve связана с событием onclick кнопки, нажатие "ENTER" запускает это событие, вызывая выполнение обещания.

Вот что вам следует обновить

<button type = "button" onclick='fnresolve();'> fnresolve </button>

Что заняло у тебя так много времени? 7 минут! Спасибо.

dcromley 14.08.2024 20:40

хаха, извини, мне пришлось сходить в туалет...

Derek Roberts 14.08.2024 20:42

Однако здесь нет формы. Вероятно, это просто элемент кнопки, имеющий фокус.

Pointy 14.08.2024 20:43

Я попробовал принять - пришлось ждать минут 15.

dcromley 14.08.2024 20:44

@Пойнти, на месте! вы всегда будете думать о формах, когда увидите кнопки...

Derek Roberts 14.08.2024 20:45

«Тип» не помог, но это помогло: <button onclick='fnresolve();this.blur();'> fnresolve </button>

dcromley 14.08.2024 20:55

Должен ли я обновить соответствующим образом, или вы можете отредактировать ответ, если можете, @dcromley?

Derek Roberts 14.08.2024 20:56

Другие вопросы по теме