4

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 中工作。

4

2 回答 2

3

我不确定我是否理解。你不能就event.isDefaultPrevented()这样使用吗

于 2010-11-30T12:38:00.287 回答
0

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

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

我不知道这是否会奏效,但它可能值得一试。

对于第二个问题,我会尝试类似于实时事件处理的方法。body在父元素(即顶级)上放置一个监听器div。如果你能像前面提到的那样进入你的钩子preventDefault,你可以用它来设置一个标志。如果事件冒泡到该元素并且未设置您的标志,请执行扩展行为。尽管这不适用于所有事件,因为并非所有事件都会冒泡。解决此问题的另一种方法可能是延迟执行,直到当前堆栈完成使用setTimeout(0,...),然后检查标志。

于 2010-11-27T09:55:58.117 回答