javascript - 在 focus() 事件中调用时,alert() 函数正在循环

标签 javascript jquery loops focus alert

我想要在专注于输入时弹出警报。它正确弹出,但是当我单击“确定”或“x”(即取消)时,它会无限循环并且永远不会关闭。

$('input').focus(function () {
       alert('hello');
});

最佳答案

这是因为当 alert 关闭时,input 再次获得焦点(这是它出现时的新焦点 - 请注意按钮周围的轮廓)对话?)

如果您只想让警报显示一次,您也许可以编写类似于以下内容的内容:

let hasShownAlert = false

$('input').focus(function () {
  if (!hasShownAlert) {
    hasShownAlert = true
    alert('hello')
  }
})

当然,您可以使用状态容器或其他东西来改进这一点,但这是实现它的最简单的方法。 (注意:hasShownAlert 变量必须在 onfocus 处理程序之外定义,否则它将被垃圾收集器清除。)


更新:因此,如果您不想让它只显示一次,您可以执行以下操作。第一个更简单,将监听点击事件,而不是焦点。第二种方法是设置一个 didShowAlert 变量——每次处理程序被触发时反转该值。例如...

let didShowAlert = false
$('input').on('focus', (ev) => {
   if (didShowAlert) {
     didShowAlert = false
   } else {
     didShowAlert = true
     alert('hello')
   }
})

关于javascript - 在 focus() 事件中调用时,alert() 函数正在循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46254495/

相关文章:

javascript - Facebook评论框位置

javascript - 不显示时间序列折线图

Javascript跳过星期六和星期日在一个月内循环

javascript - 动画在悬停时停止,在鼠标移出时开始但不能再次悬停以重复停止动画

javascript - 检查元素中是否包含某些内容

javascript - 如何使用 jquery 动态更改 DOM 元素 CSS 类

javascript - 使用 AngularJS 的默认过滤器和用户定义过滤器的输入字段

R 循环随机正态分布

javascript - 循环比休息更重要?

loops - 一旦进入无限循环,如何终止从Sublime Text 2终端运行的程序?