在JS中同步浏览器事件

时间:2014-09-05 12:50:39

标签: javascript events asynchronous

这是一个抽象的问题,但我一直在思考它的用处,也许它已经解决了,或者激励某人基于它做某事。

最近我遇到了一个问题,即触发了三个浏览器事件,所有这些都是单个用户交互的结果:点击,模糊和焦点。当用户从一个输入点击到另一个输入时,会发生这些事件;当用户从一个标签到另一个标签时,会出现类似的设置。

我遇到的麻烦是他们按此顺序开枪:模糊,专注,点击。这意味着,如果blur事件导致DOM更改,则click事件可能会受到影响。我真的很想点击,模糊,专注 - 但这不是浏览器给我的。

我认为可以生成一个通用实用程序,捕获和取消浏览器事件,然后同步它们并为所有三个触发单个处理程序。也许扩展Event类以便可以恢复事件。

我可以在这里使用更抽象的设计模式吗?有什么东西可以让我设置任意数量的事件监听器,然后在一切事件完成后触发一个事件?它已经实现了吗?欢迎所有建议。

1 个答案:

答案 0 :(得分:0)

不需要打破这个!你总是可以编程方式触发这些事件

注意:此处引用的object是使用javascript选择器选择的任何元素。

最初onBlur& onFocus执行event.preventDefaultonClick允许var clicked=false; object.onblur = function(e) { if (!clicked) { e.preventDefault } }; object.onfocus = function(e) { if (!clicked) { e.preventDefault } }; 先完成工作

object.onclick=function(){
clicked=true;
//Do anything
object.unbind('blur'); //this do undo prevent default
object.unbind('focus'); //this do undo prevent default

object.blur(); //in order you want
object.focus(); 

//make sure to put condition if click clicked
};

内部点击事件撤消上述预防并按您想要的顺序触发事件

{{1}}

多数民众赞成!希望它有所帮助