在Chrome浏览器中,focusout jQuery中出现了无限循环问题。

4
我有两个输入框,其中一个是静态的:
<input type="text" class="someclass" />

以及其他动态内容:

$("<input />", {
    type: "number",
    min: "0"
}).addClass("someclass").appendTo($("#someid"));

这段代码在静态输入中运行正常:

$(document).on("focusout", ".someclass", function(){ alert("hello!");});

但是对于动态输入生成无限循环警报的情况,这只发生在Chrome浏览器中,有人有什么想法吗?

当焦点转移到具有相同类的其他输入时,错误会出现。


1
这只是一个猜测:可能是因为在Chrome中关闭警告框时,会注册一个focusout事件?无论如何,使用alert()不是解决问题或测试新功能的好方法,因为它会阻止代码执行。请尝试改用console.log() - Terry
你的代码在Chrome中看起来没问题:https://jsfiddle.net/ymazyrmn/。也许你页面中还有其他代码触发了重复的focusout事件。 - Kalimah
我有同样的问题...我的Chrome版本是55.0.2883.87 m(64位) - user7420251
这是我在一周内看到的关于 Chrome 焦点/失焦事件和 alert 的第三个问题... 我同意第一个评论,不要使用 alert - 有可用的库可以创建非阻塞(但仍具有“模态”感觉)的警告,不会出现这种失败情况 - 例如 alertify。 - Jaromanda X
@Kalimah Apps是指当焦点转移到其他输入时。 - user7420251
1个回答

5

正如Terry所说,警告框并不是解决任何JS问题的最佳方式。

用console.log()替换alert可以显示事件在Chrome和其他浏览器中仅触发一次。

$("<input />", {
  type: "number",
  min: "0"
}).addClass("someclass").appendTo($("#someid"));

$(document).on("focusout", ".someclass", function() {
  console.log("alert");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="someclass" />
<div id='someid'>

</div>

看这个答案:

我认为这是因为每次点击警告框的“确定”按钮时,浏览器会将焦点从警告框发送到您的文本字段。我想你最终版本的代码中可能不会弹出警告框,所以长期来看这可能不是一个问题。

https://dev59.com/KVnUa4cB1Zd3GeqPdLrX#6869420


是的!!只有在alert()时才会出现错误,使用console.log和其他指令都很好,非常感谢!!! - user7420251

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接