Убить setTimeout на Popover - PullRequest
0 голосов
/ 30 мая 2018

У меня есть поповер, который используется для отправки отзыва / вопроса.Пользователь может отправить отзыв / вопросы через него.У меня есть два состояния popover:

  1. Исходное состояние, Показывает текстовое поле и кнопка отправки
  2. Состояние успеха, Показывает большой круг проверки fa для успеха.

Поповер успеха должен исчезнуть через 5 секунд, поэтому я установил setTimeout в 5000, что уничтожает успех и повторно инициализирует поповер в исходное состояние.

Существует вероятность того, что пользователь может щелкнуть назад по элементу управления, чтобы скрыть состояние успеха.Если пользователь делает это, он должен скрыть / уничтожить состояние успеха и повторно инициализировать всплывающее окно.Я обработал событие click запускающего управления и проверил, виден ли popover, используя код ниже.

$('.questionIcon').data('bs.popover').tip().hasClass('in')

Если виден popover, скрыть / уничтожить и повторно инициализировать его в исходное состояние.Проблема здесь в том, что setTimeout может быть все еще включен во всплывающем окне Success.Как заставить мой popover заставить игнорировать тайм-аут выполнения моего кода?Узнал, что можно использовать clearTimeout, но как на popover?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Пока успех всплывает, вы должны установить время ожидания и сохранить объект времени ожидания в переменной как

const timerObj = setTimeout(function(){closePopPver()},5000);

И когда пользователь снова щелкнет по запускающему элементу управления, чтобы скрыть состояние успеха,, в этом клике вы можете написать

onclick={function(){clearTimeout(timerObj)}}

Редактировать: Другой способ - установить флаг, когда пользователь нажимает, скажем, reintialised = true.Затем в функции тайм-аута вы можете проверить этот флаг,

setTimeout(function(){
  if(!reintialised) closePopPver()
},5000);
0 голосов
/ 30 мая 2018

Свяжите setTimeout() с переменной и передайте ее clearTimeout() в вашем обработчике popover.

var myTimeout = window.setTimeout(function(){ doSomething(); },5000);
window.clearTimeout(myTimeout);
...