gpt4 book ai didi

javascript - 无法触发自制的Event.prototype

转载 作者:行者123 更新时间:2023-11-30 12:36:51 25 4
gpt4 key购买 nike

我有这个原型(prototype)函数:

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

我通过这样做从代码调用:

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

但我得到:

Uncaught TypeError: undefined is not a function

我做错了什么?

最佳答案

由 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.
};

如您所见,这些方法通常调用原始事件的同名方法(存储在 jQuery.Event 实例的 originalEvent 属性中)。关键是,jQuery.Event 在它的继承链中没有 Event.prototype,因此对后者的任何修改注定对前者没有影响。

底线:要扩展传递给 jQuery 事件处理程序的事件,请扩展 jQuery.Event.prototype 而不是 Event.prototype

关于javascript - 无法触发自制的Event.prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com