如何让 jQuery 触发本机自定义事件处理程序

Ste*_*mas 5 javascript jquery

有谁知道让 jQuery 触发由(不是 jQuery.trigger() )本机 JavaScript 事件处理程序处理的自定义事件所需的魔力?

test = document.querySelectorAll('.test')[0];
test.addEventListener('click', function() {
    console.log('click')
});
test.addEventListener('custom', function(ev) {
    console.log('custom', ev.detail)
});

// Custom Native -> Native works as expected
test.dispatchEvent(new CustomEvent('custom', {detail: 'detail'})); // -> "custom" "detail"

// Standard jQuery -> Native works as expected
$(test).trigger('click'); // -> "click"

// Custom jQuery -> Native does not work
$(test).trigger('custom'); // -> No log?
$(test).trigger({type: 'custom'}); // -> No log?
Run Code Online (Sandbox Code Playgroud)

codepen.io 实例

编辑添加:

有关我的用例的更多详细信息。我正在开发一个依赖自定义事件但本身不使用 jQuery 的库。然而,我想让这个库对那些有 jQuery 的应用程序来说更方便。

Ste*_*mas 3

好吧,在调试器中单步调试 jQuery 源代码后,看起来有一个解决方案。不优雅,但可行。诀窍是onxxxx向元素添加一个属性,其中xxxx是事件名称。问题中代码的添加是:

test.oncustom = function(ev, data) {
    // ev is the jQuery Event object
    // data is data passed to jQuery `.trigger()`
}
Run Code Online (Sandbox Code Playgroud)

ev.detail请注意,jQuery 不会像标准事件那样添加自定义数据,例如。相反,它将自定义数据作为附加参数传递。