在 Popover 上杀死 setTimeout

Kill setTimeout on Popover

我有用于提交的弹出窗口 feedback/question。用户可以通过它提交 feedback/questions。我有两种弹出窗口状态:

  1. 初始状态,显示文本框和提交按钮
  2. 成功状态,显示成功的大 fa-check-circle。

成功弹出窗口应在 5 秒内消失,因此我将 setTimeout 设置为 5000,这会破坏成功并将弹出窗口重新初始化为初始状态。

用户可能会点击触发控件返回以隐藏成功状态。如果用户这样做,它应该 hide/destroy 成功状态并重新初始化弹出窗口。我处理了触发控件的点击事件,并使用以下代码检查弹出窗口是否可见。

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

如果 popover 可见 hide/destroy 并将其重新初始化为初始状态。这里的问题是 setTimeout 可能仍然在 Success 弹出窗口上。如何让我的弹出窗口强制忽略超时执行我的代码?知道可以使用 clearTimeout 但如何使用 popover?

setTimeout() 绑定到变量并将其传递给弹出窗口处理程序中的 clearTimeout()

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

当成功弹出时,您必须设置超时并将超时对象存储在变量中,

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

并且当用户点击触发控件返回时隐藏成功状态,在那个onclick里面可以这样写,

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

编辑:另一种方法是在用户单击说 reintialised = true 时设置一个标志。然后在超时函数里面,你可以检查这个标志,

setTimeout(function(){
  if(!reintialised) closePopPver()
},5000);