событие onchange срабатывает при сворачивании окна браузера

124
27 июня 2019, 15:10

Подскажите, есть input. Нужно отловить событие, когда ввод данных в поле будет завершен. По этому событию будет обновляться запись в БД и сниматься блокировка. Ввод считается завершенным, пользователь щелкнул вне поля на этой странице, ну или нажал tab. В общем, сошел с записи. Кнопку делать не могу, нужно именно поле обрабатывать.

Проблема в том, что onchange, как и focusout, срабатывает, если уйти с вкладки или свернуть браузер. Я понимаю, при этих действиях, наверное, теряется фокус поля и запускается onchange. Но если окно открыть обратно страницу с полем, фокус у поля есть и каретка в том месте, где была при сворачивании и это дает надежду, что можно что-то сделать.

Как можно выйти из ситуации, есть ли какой-то способ не запускать событие при сворачивании браузера?

Спасибо!

Answer 1

 У меня получилось только задержать обработку event примерно следующим образом:

// Можем ли мы производить действие (да или нет) 
var canTakeAction = true; 
 
// Обработчик события, вызываемый через малое время 
function takeAction() { 
  if (canTakeAction) { 
    console.log("We take action") 
  } 
} 
 
// Общая функция для изменения видимости 
function handleVisibilityChange(newValue) { 
    canTakeAction = newValue; 
} 
 
// Если у нас вкладка поменялась 
document.addEventListener("visibilitychange", function () { 
 
    if (document.hidden) { 
        handleVisibilityChange(false); 
    } else { 
        handleVisibilityChange(true); 
    } 
}); 
 
// документ доступен 
document.addEventListener('focus', function (evt) { 
    handleVisibilityChange(true); 
}, false); 
// документ теряет фокус 
document.addEventListener('blur', function (evt) { 
    handleVisibilityChange(false); 
}, false); 
//окно доступно 
window.addEventListener('focus', function () { 
    handleVisibilityChange(true); 
}, false); 
// окно теряет фокус 
window.addEventListener('blur', function () { 
    handleVisibilityChange(false); 
}, false);
<!-- Вызываем обработчик события через малое время, чтобы глобальные события уже отработали --> 
<input onblur="setTimeout(takeAction,100)"> 
 <!-- -->

READ ALSO
Meteor js Как получить в переменную значение из MongoDB

Meteor js Как получить в переменную значение из MongoDB

Начал изучать Meteor js и столкнулся с проблемойНе могу вывести единственное значение из MongoDB

129
Как повторить этот css эффект?

Как повторить этот css эффект?

Подскажите, как я могу повторить эффект появления блока, как на этом видео?

148
AUTO_INCREMENT по группам

AUTO_INCREMENT по группам

Подскажите, как создать авто_инкриментальную колонку в таблице по группе?

138
Копия вордпресс сайта работает иначе

Копия вордпресс сайта работает иначе

Я создал 2 сайтаОдин работает давно

155