В настоящее время у меня появляется модальное окно, и я хочу, чтобы оно исчезло, если пользователь не вводит свой пароль в течение 30 секунд.
Это работает, но когда я попытался реализовать это с помощью события onChange на Вход, оно перестало работать. Странно то, что когда я использую console.info для проверки, это работает. Как только я удаляю эти console.info, это не работает. Просто интересно, видел ли кто-нибудь это раньше?
let TIMEOUT = null;
const setModalTimeout = randomFunction => {
if (TIMEOUT === null) {
// console.info('NOTE: set timeout before', TIMEOUT, new Date().toLocaleTimeString());
TIMEOUT = setTimeout(() => randomFunction(false), MODAL_TIMEOUT);
}
// console.info('NOTE: set timeout after', TIMEOUT, new Date().toLocaleTimeString());
};
const clearModalTimeout = (done) => {
if (TIMEOUT !== null) {
// console.info('NOTE: clear timeout before', TIMEOUT, new Date().toLocaleTimeString());
clearTimeout(TIMEOUT);
TIMEOUT = null;
}
// console.info('NOTE: clear timeout after', TIMEOUT, new Date().toLocaleTimeString());
done && done();
};
const resetModalTimeout = (randomFunction) => {
// console.info('NOTE: reset timeout', TIMEOUT, new Date().toLocaleTimeString());
clearModalTimeout();
setModalTimeout(randomFunction);
}
Сверху логика, снизу входной тег.
<input type = "password" placeholder = "pin/password" id = "password" oncreate = {element => element.focus()} onchange = {() => resetModalTimeout(randomFunction)} />
Основная часть этой проблемы заключается в том, что если я раскомментирую console.infos, все работает отлично. В том виде, в котором код показан сейчас, он не работает. Он будет проходить только через цикл Первый (поэтому работает только в течение 30 секунд, даже если я внес изменения во входные данные). и когда я регистрируюсь, это ясно показывает, что изменения происходят. Есть идеи? Конечно, мне не нужен console.info в основном коде, также я использую гиперприложение (существующая кодовая база).
При ведении журнала я вижу, что значение TIMEOUT изменяется, как и ожидалось.
@epascarello Извините, я должен был упомянуть и это! У меня это выходит за рамки, при регистрации я вижу изменение значения (на ноль и на целое число и т. д.)
Не могли бы вы предоставить проверяемый фрагмент кода?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я только что понял, в чем дело. После дополнительной отладки мы с коллегой поняли, что это связано с хуком жизненного цикла. Это должно быть oninput, а не onchange. На моем компьютере onchange нормально работал при регистрации (не совсем понимаю, почему, если у кого-то есть ответ на этот вопрос), но не на компьютере моего коллеги. Когда он был изменен на oninput, он отлично работал для нас обоих. onchange ждал, когда фокус покинет Вход.
Где первоначально было определено
TIMEOUT?let TIMEOUT = null