只有在事件(由另一个未知函数)调用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中,我相信我能在这个问题的基础上找到解决方案。
function preventDefault() { [native code] }
undefined
对于第一个问题,请尝试以下方法:
oldPreventDefault = Event.prototype.preventDefault; Event.prototype.preventDefault = function() { //do stuff oldPreventDefault.call(this); }
我不知道这是否可行,但也许值得一试。
对于第二个问题,我将尝试类似于实时事件处理的方法。在父元素(即。 body 或是高层 div ). 如果你能把钩子插进去 preventDefault 如前所述,您可以使用它设置标志。如果事件冒泡到该元素,而未设置标志,则执行扩展行为。虽然这不适用于所有事件,因为并非所有事件都会出现泡沫。解决此问题的另一种方法可能是延迟执行,直到当前堆栈完成使用 setTimeout(0,...) 然后检查国旗。
body
div
preventDefault
setTimeout(0,...)
我不确定我是否理解。你就不能用 event.isDefaultPrevented() 喜欢 this
event.isDefaultPrevented()