我想在本地事件的处理程序中触发自定义事件,满足以下条件:
- 我希望处理程序采用此形式:
function(event, arg) {}
,其中 event
是原始的本地事件(因此可以调用event.preventDefault()
)arg
是由trigger
器传递的一些数据(在原始事件的处理程序中)- 两个事件(本地和自定义)都在同一个元素上触发(因此自定义事件的名称必须与原始事件不同)
我已经取得了一定进展,并且它可以工作:
// the native event handler
function(event) {
var e = jQuery.Event("some_custom_event");
e.foo = 'bar';
$(this).trigger(e);
if (e.isDefaultPrevented())
event.preventDefault();
}
// an example handler for the custom event:
function (event) {
alert(event.foo);
event.preventDefault();
}
我想我也可以将原始事件和foo
作为参数传递给自定义事件处理程序,但我希望有一个标准的处理程序(没有function(event1,event2)
)。
在jQuery中可以(轻松地)实现我想要的吗?
preventDefault
。 - oripreventDefault
应该发生什么吗?它一开始就起作用了吗?我确信添加额外参数不会影响之前已经正常工作的任何内容。 - Selvakumar ArumugampreventDefault
),但是如果我使用.trigger('custom', [event, foo])
,则处理程序变成了function(c_event, n_event, foo) {}
,看起来很丑。 - ori$(this).trigger(custom, [[event, foo]]);
,然后自定义事件会像这样$('a').bind('some_custom_event', function (e, args)
,接着你就可以在args[0]
中访问原始事件,在args[1]
中访问foo
。查看演示 - Selvakumar Arumugam.trigger
风格,但在这里使用它意味着(为了满足我的要求)处理程序需要获取2个事件作为参数,我不喜欢(因此从未实现)。也许我要求太多了...第一个处理程序参数始终是触发的事件,因此可能无法改进我的原始解决方案... - ori