Javascript jQuery中的默认事件处理程序

Javascript jQuery中的默认事件处理程序,javascript,jquery,Javascript,Jquery,我正在寻找实现以下目标的方法。我可以建立一些机制来做到这一点,我要求一些内置的或非常简单的方式,如果它存在,我错过了它 编辑: 请注意,我谈论的是随机对象中的事件,而不是DOM元素中的事件。无法按照可能的副本中的建议,使用父级等来管理事件顺序 编辑2: 可能是调用了所有处理程序后的回调?还是始终最后执行的处理程序 鉴于: var someObject={}; $(someObject).on("event",function() { console.log('Default handler');

我正在寻找实现以下目标的方法。我可以建立一些机制来做到这一点,我要求一些内置的或非常简单的方式,如果它存在,我错过了它

编辑: 请注意,我谈论的是随机对象中的事件,而不是DOM元素中的事件。无法按照可能的副本中的建议,使用父级等来管理事件顺序

编辑2: 可能是调用了所有处理程序后的回调?还是始终最后执行的处理程序

鉴于:

var someObject={};
$(someObject).on("event",function() { console.log('Default handler'); });
...
$(someObject).on("event",function() { console.log('Other handler'); });
执行以下操作时:

$(someObject).triggerHandler("event");
输出为:

Default handler
Other handler
我们都知道这一点。问题是:如果我想让第一个事件成为“默认”处理程序,在没有其他事件处理程序(这里没有问题)或者其他处理程序没有停止事件传播(这里是问题)的情况下执行该怎么办

我正在寻找一种方法来做一些事情,比如:

$(someObject).on("event",function(ev) { ev.preventDefault(); });
并阻止第一个事件处理程序执行。在本例中,由于执行顺序的原因,无法正常工作。颠倒执行顺序不是正确的方法

TL;博士

是否可以设置一个默认处理程序,在没有其他处理程序且事件未被取消的情况下调用该处理程序

编辑3:为了给您一个更好的想法,当前的方法如下(本例中的名称由以下部分组成):


我只是想摆脱这个问题,并能够直接使用triggerHandler。

您可以添加一个参数来设置要在triggerHandler函数中执行的代码

您可以在添加参数时参考此线程。

如果调用了preventDefault(),则不存在“默认处理程序”。事件处理程序按注册顺序执行。所以第一个注册的就是第一个执行的

如果您的“默认处理程序”不需要同步执行,您可以在所有其他处理程序完成后延迟“默认处理程序”的执行,并且在任何其他处理程序中,如果需要,可以恢复:

var defaultHandlerTimeout;
$element.on('event', function() {
  defaultHandlerTimeout = setTimeout(function() {
    // your actual handler
  });
});

$element.on('event', function() {
  // prevent the "default handler" from being executed
  clearTimeout(defaultHandlerTimeout);
});

jQuery在内部存储所有事件,您可以使用
$.\u数据(elem,'events')
访问特定的元素事件

这是否有助于你的处境,我不确定,但值得深入研究。就我个人而言,我从未发现有必要使用它


请参见

希望这就是您要寻找的。这称为观察者模式

var someObj={};
someObj.eventCallbackList={};
someObj.createEventObject=函数(名称){
返回{
类型:名称,
preventDefault:function(){
this.callDefault=false;
},
callDefault:true
}
}
someObj.on=函数(eventName、回调、defaultFlag){
if(!this.eventCallbackList[eventName]){
//可以有多个其他处理程序
此.eventCallbackList[eventName]={
其他:[],
默认值:null
};
}
如果(默认标志){
this.eventCallbackList[eventName]['default']=callback;
}否则{
this.eventCallbackList[eventName]['other'].push(回调);
}
}
someObj.triggerHandler=函数(eventName){
var event=this.createEventObject(eventName);
var callbacks=this.eventCallbackList[eventName];
如果(回调){
if(回调['other']){
for(var i=0;i

的可能副本不完全相同,请注意,我指的是随机对象,而不是DOM元素。您是否考虑过更改为
“default”
“event”
“event”
不知道将有多少个事件处理程序。在这种情况下,最后一个应该调用
triggerHandler(“默认”)
。。。但是每个处理程序都不知道它是否是最后一个。虽然您没有使用jQuery的方法,但这是一个非常好的选择,谢谢。在这里您无法使用jQuery。jquery不提供对象上的事件处理。它们仅适用于dom。jQuery确实提供对象上的事件处理。但这不是重点,我没有抱怨这只是一个评论,干得好,谢谢你。你有什么参考资料,我可以在那里读到更多关于它的@Gabriel。谢谢。它们的工作方式与其他任何事件一样,使用
on()
triggerHandler()
。你可以在这个论坛或jquery.com上找到大量信息。
var defaultHandlerTimeout;
$element.on('event', function() {
  defaultHandlerTimeout = setTimeout(function() {
    // your actual handler
  });
});

$element.on('event', function() {
  // prevent the "default handler" from being executed
  clearTimeout(defaultHandlerTimeout);
});