是否有一种方法仅在事件(另一个未知函数)上调用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] }, ,但即警报 undefined. 。因此,IE不会让我定义event.prototype.test,但它会让我重新定义event.prototype.preventdefault。奇怪的。我敢肯定,如果我可以在IE中工作,我可以根据该问题提出解决第二个问题的解决方案。

有帮助吗?

解决方案

对于第一个问题,请尝试这样的事情:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

我不知道这是否会起作用,但这可能值得一试。

对于第二个问题,我会尝试类似于实时事件处理的事情。将听众放在父元素上(即 body 或顶级 div)。如果你能陷入困境 preventDefault 如前所述,您可以使用它来设置标志。如果事件燃烧到该元素,而您的标志未设置,请进行扩展的行为。尽管这并不适合所有事件,因为并非所有事件都泡泡。解决此问题的另一种方法可能是延迟执行,直到当前堆栈使用 setTimeout(0,...) 然后检查标志。

其他提示

我不确定我已经明白。你不能只使用 event.isDefaultPrevented()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top