如何在jQuery中触发自定义事件,传递原始事件和数据

ori*_*ori 1 jquery

我想在这些条件下从本机事件的处理程序中触发自定义事件:

  • 我希望处理程序的形式为:function(event, arg) {},where
  • event是原始的本机事件(所以我可以打电话event.preventDefault())
  • argtriggerer 传递的一些数据(在原始事件的处理程序中)
  • 两个事件(本机和自定义)都在同一个元素上触发(因此自定义事件的名称必须与原始事件的名称不同)

我能够做到这一点,它的工作原理:

// 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();
}
Run Code Online (Sandbox Code Playgroud)

我想我也可以传递原始事件和foo自定义事件处理程序的参数,但我想要一个标准的处理程序(否function(event1,event2).

可以在jQuery中轻松完成我想做的事吗?

Sel*_*gam 5

trigger函数有两种风格,我认为你应该看看第一个语法.trigger( eventType [, extraParameters] ).

如果我理解正确那么你需要做的是你foo作为额外的参数传递如下,

$(this).trigger(e, [foo]);
Run Code Online (Sandbox Code Playgroud)

jQuery文档的一个例子如下,

$("p").click( function (event, a, b) {
// when a normal click fires, a and b are undefined
// for a trigger like below a refers to "foo" and b refers to "bar"

} ).trigger("click", ["foo", "bar"]);
Run Code Online (Sandbox Code Playgroud)

从文档.. 阅读更多..

.trigger(eventType [,extraParameters])

eventType包含JavaScript事件类型的字符串,例如click或submit.

extraParameters传递给事件处理程序的附加参数.