无法触发自制的Event.prototype

时间:2014-09-12 06:33:40

标签: javascript jquery javascript-events

我有这个原型功能 - >

Event.prototype.eventPreventDefault = function () {
    this.preventDefault ? this.preventDefault() : this.returnValue = false;
}

我通过这样做来调用代码 - >

$element.click(function (evt) {
        evt.eventPreventDefault();
}

但我得到

  

未捕获的TypeError:undefined不是函数

我做错了什么? 谢谢!

1 个答案:

答案 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