这是一个抽象的问题,但我一直在思考它的用处,也许它已经解决了,或者激励某人基于它做某事。
最近我遇到了一个问题,即触发了三个浏览器事件,所有这些都是单个用户交互的结果:点击,模糊和焦点。当用户从一个输入点击到另一个输入时,会发生这些事件;当用户从一个标签到另一个标签时,会出现类似的设置。
我遇到的麻烦是他们按此顺序开枪:模糊,专注,点击。这意味着,如果blur事件导致DOM更改,则click事件可能会受到影响。我真的很想点击,模糊,专注 - 但这不是浏览器给我的。
我认为可以生成一个通用实用程序,捕获和取消浏览器事件,然后同步它们并为所有三个触发单个处理程序。也许扩展Event类以便可以恢复事件。
我可以在这里使用更抽象的设计模式吗?有什么东西可以让我设置任意数量的事件监听器,然后在一切事件完成后触发一个事件?它已经实现了吗?欢迎所有建议。
答案 0 :(得分:0)
不需要打破这个!你总是可以编程方式触发这些事件
注意:此处引用的object
是使用javascript选择器选择的任何元素。
最初onBlur
& onFocus
执行event.preventDefault
,onClick
允许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}}
多数民众赞成!希望它有所帮助