alert()函数在focus()事件中调用时循环

时间:2017-09-16 13:37:22

标签: javascript jquery loops focus alert

我专注于输入时想要一个警告弹出窗口。它弹出正确,但是当我点击“确定”时或者' x'即取消,它无限循环,永不关闭。

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

2 个答案:

答案 0 :(得分:2)

这是因为当alert关闭时let hasShownAlert = false $('input').focus(function () { if (!hasShownAlert) { hasShownAlert = true alert('hello') } }) 再次成为焦点(这是新焦点出现时 - 注意对话框中按钮周围的轮廓?)

如果你只想制作一次警报节目,你或许可以写一些类似的东西:

hasShownAlert

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

更新:如果您不希望它只展示一次,那么您可以做一些事情。第一个,更简单的是,将监听didShowAlert事件,而不是关注。第二种方法可能是设置let didShowAlert = false $('input').on('focus', (ev) => { if (didShowAlert) { didShowAlert = false } else { didShowAlert = true alert('hello') } }) 变量 - 每次触发处理程序时反转该值。 E.g ...

^[^>]*(?:%>[^>]*)*$

答案 1 :(得分:0)

你可以尝试像

那样的黑客攻击
$(document).on("focus", 'input:not(.unFocus)', function() {
       alert('hello');
       $('input').addClass('unFocus');
       setTimeout(function() {
           $('input').removeClass('unFocus');
       }, 10);
});

这可能不是理想的做法,但它有效:)