这个问题听起来可能很愚蠢,但我真的无法为此找到任何具体解决方案。
我们正在修改现有的旧应用程序,该应用程序具有与每种形式相关的大量形式和许多元素。在大多数情况下," Onblur"事件与一个元素关联,并且" OnClick"事件与其他与查找相关的元素相关联。
仅在IE中支持传统应用程序,该应用程序使用模态对话框显示验证消息,该消息用于冻结代码流,直到执行用户操作为止。但是在具有Chrome支持的改版应用程序中,模态窗口不适用,并且使用承诺模仿代码流。
现在使用新方法的问题是,当用户输入一个元素中的某些无效数据并尝试单击另一个查找元素时,第一个元素上的" Onblur"事件以及第二个元素上的" OnClick"事件是同时发射的。导致多个窗口(一个用于验证,一个用于查找(是否有任何方法可以避免" Onblur"事件启动后发生的" onClick"事件射击?是否有可能避免并发射击?
注意:可能会有一些调整,例如添加超时和移动验证逻辑在第二个元素的" onClick"事件中以解决此问题。但是不幸的是,我将无法做到这一点,因为它是一个旧应用程序,并且在整个应用程序中要进行的更改量很大。
示例代码解释问题:
<html>
<head><title>Test</title></head>
<body>
<input type="text" onblur='setTimeout(function(){window.open("http://www.google.com", "BlurWindow","");},5000)' />
<input type="button" onclick='setTimeout(function(){window.open("http://www.bing.com", "ClickWindow","");},5000)' value="popup" />
</body>
</html>
当我在文本框中键入某些文本并单击弹出按钮时," OnClick"one_answers" Onblur"事件都会发出。我需要某种方法来处理并发事件射击。是否可以?
我们无法控制事件射击的顺序。因此,我们进行了解决问题来解决这个问题。我们正在以任何其他按钮元素的变量和单击中捕获当前的焦点元素,如果焦点元素变量不是null,我们将阻止按钮的ONCLICK事件。
伪代码如下:
捕获聚焦元素:
$(":input[type=text]").on('focusin', function () {
window.top.prevFocusField = $(this);
});
阻止OnClick Action:
if (window.top.prevFocusField != null) {
return;
}