Javascript 仅当事件默认值为/isn';不能阻止

Javascript 仅当事件默认值为/isn';不能阻止,javascript,jquery,jquery-events,preventdefault,Javascript,Jquery,Jquery Events,Preventdefault,只有在事件上(由另一个未知函数)调用了event.preventDefault()时,才有办法运行函数。这是一个jQuery插件,所以我不知道页面的其他部分可能在做什么。我试过这个: Event.test = Event.preventDefault; Event.preventDefault = function () { alert('Success'); this.test(); } 但它不起作用。。。只是表现正常,没有错误 相反,我也想要相反的结果。。。仅当未调用eve

只有在事件上(由另一个未知函数)调用了
event.preventDefault()
时,才有办法运行函数。这是一个jQuery插件,所以我不知道页面的其他部分可能在做什么。我试过这个:

Event.test = Event.preventDefault;
Event.preventDefault = function () {
    alert('Success');
    this.test();
}
但它不起作用。。。只是表现正常,没有错误

相反,我也想要相反的结果。。。仅当未调用
event.preventDefault()
时调用函数。实际上,将函数添加到事件的默认操作。有什么想法吗?这一切可能吗


编辑:根据评论,我找到了第一个问题的解决方案:。它在Chrome中工作(警报
函数preventDefault(){[native code]}
,但IE提醒
未定义的
。因此IE不允许我定义
事件.原型.测试
,但它可以让我重新定义
事件.原型.预防默认值
。奇怪。我确信如果我能让它在IE中工作,我可以根据这个问题想出第二个问题的解决方案。

对于第一个问题,尝试一些方法像这样:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}
我不知道这是否行得通,但也许值得一试


对于第二个问题,我会尝试类似于实时事件处理的方法。将侦听器放在父元素上(即
body
或顶级
div
)。如果您可以像前面提到的那样将钩子插入
preventDefault
,您可以使用它来设置标志。如果事件冒泡到该元素,而您的标志未设置,请执行扩展行为。虽然这不会对所有事件都起作用,因为不是所有事件都冒泡。解决此问题的另一种方法可能是将执行延迟到当前事件t stack已完成使用设置超时(0,…)
,然后检查标志。

我不确定我是否理解。您不能只使用
event.isDefaultPrevented()
类似于您可能会看到通过使用“preventDefault”可以实现什么在
事件上。原型
而不是
事件
-可能在IE中不起作用however@Pointy谢谢。在Chrome中工作。它在IE8中工作了一半…IE运行我的新功能,但不能阻止默认值,这有点烦人。肯定有办法解决它。哇,IE在处理这个问题时有一些糟糕的行为…我甚至将preventDefault方法重新创建为一个名为test的新函数,该函数只返回false。没有骰子。您是刚刚调用test,还是返回了它的返回值?我以前做过。