只有在事件(由另一个未知函数)调用event.preventDefault()时才能运行函数。这是一个jQuery插件,所以我不知道页面的其他部分可能正在做什么。我试过这个:
Event.test = Event.preventDefault;
Event.preventDefault = function () {
alert('Success');
this.test();
}
但它不起作用......只是表现正常,没有错误。
相反,我也想要反过来......只有在没有调用event.preventDefault()时才调用函数。实际上,要将函数添加到事件的默认操作中。有任何想法吗?这一切都可能吗?
编辑:根据评论,我找到了第一个问题的解决方案:http://jsfiddle.net/nathan/VAePB/9/。它适用于Chrome(警告function preventDefault() { [native code] }
,但IE警告undefined
。所以IE不会让我定义Event.prototype.test,但它会让我重新定义Event.prototype.preventDefault。很奇怪。我如果我能在IE中使用它,我相信我可以根据这个问题想出第二个问题的解决方案。
答案 0 :(得分:3)
我不确定我是否理解。你不能只使用像this
这样的event.isDefaultPrevented()
答案 1 :(得分:0)
对于第一个问题,请尝试以下方法:
oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
//do stuff
oldPreventDefault.call(this);
}
我不知道这是否有用,但可能值得一试。
对于第二个问题,我会尝试类似于实时事件处理的东西。将监听器放在父元素上(即body
或顶级div
)。如果您可以如前所述挂钩preventDefault
,则可以使用它来设置标志。如果事件冒泡到该元素并且未设置标志,请执行扩展行为。虽然这不适用于所有事件,但并非所有事件都会冒泡。解决此问题的另一种方法可能是延迟执行,直到当前堆栈使用setTimeout(0,...)
完成,然后检查标志。