所以我有一个jQuery移动项目,为了关闭(大多数)弹出窗口,我注意到我必须在弹出窗口以外的区域中单击两次。在这些情况下,第一次点击似乎从URL地址栏中删除了#&ui-state=dialog
,而第二次实际删除了弹出窗口。
我已经检查了多个包含相同JS文件的内容,并且在查看源文件时只出现了一次。我正在直接刷新页面,因此也无法从导航中再次包含JS文件。据我所知(我很确定)没有多个自定义点击事件绑定到按钮上,触发弹出窗口(也许是幕后的jQuery Mobile,但不是自定义)。
有没有办法让我在调试时基本上监听所有点击事件,看看它们发生了什么?我在自定义JS代码中添加了中断,打开弹出窗口,它只执行一次。但是还有更多的事情发生,我不知道它的来源或我如何找到它。
答案 0 :(得分:1)
您可以劫持addEventListener
method,这样您就可以选择了解事件何时注册,甚至可以 该事件。
var oldAddEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(cb) {
var customCB = function() {
console.log('Hijacked event handler');
return cb.apply(this, arguments);
};
console.log('Hijacked add event listener');
return oldAddEventListener.apply(this, arguments);
};
如果您想捕获每个事件,请确保在任何其他附加代码之前加载此代码。
这是有效的,因为Element
会从addEventListener
继承EventTarget
。通过在原型上覆盖该方法,这可以确保每个Element
在附加事件侦听器时都会使用您的自定义方法。