我有这个原型功能 - >
Event.prototype.eventPreventDefault = function () {
this.preventDefault ? this.preventDefault() : this.returnValue = false;
}
我通过这样做来调用代码 - >
$element.click(function (evt) {
evt.eventPreventDefault();
}
但我得到
未捕获的TypeError:undefined不是函数
我做错了什么? 谢谢!
答案 0 :(得分:3)
jQuery创建的事件对象(并传递给事件处理程序)不是本机事件的子项('更喜欢组合而不是继承'原理)。他们有their own set of methods(在jQuery.Event.prototype
上设置):
jQuery.Event.prototype = {
constructor: jQuery.Event,
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse,
preventDefault: function() {
var e = this.originalEvent;
this.isDefaultPrevented = returnTrue;
if ( e && e.preventDefault ) {
e.preventDefault();
}
},
stopPropagation: function() {
var e = this.originalEvent;
this.isPropagationStopped = returnTrue;
if ( e && e.stopPropagation ) {
e.stopPropagation();
}
},
// ... and so on.
};
如您所见,这些方法通常调用原始Event的同名方法(存储在jQuery.Event实例' s originalEvent
属性中)。关键是,jQuery.Event
在其继承链中没有Event.prototype
,因此对后者的任何修改都注定对前者没有影响。
底线:扩展传递给jQuery事件处理程序的事件,扩展jQuery.Event.prototype
而不是Event.prototype
。