javascript - 如何让 jQuery 触发 native 自定义事件处理程序

标签 javascript jquery

有谁知道让 jQuery .trigger() 触发由(不是 jQuery)原生 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?

codepen.io live example

编辑添加:

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

最佳答案

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

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

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

关于javascript - 如何让 jQuery 触发 native 自定义事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36914912/

相关文章:

javascript - 从基于另一个单元格值的行中获取一个单元格值

javascript - 使用 underscore.js 对嵌套数组进行分组

javascript - 文件 uploader 的点击功能

javascript - 封装在 Promise 中的异步函数与同步函数

jquery - Laravel:Ajax 用户注册验证错误

jquery - 如何在运行时操作 CSS

javascript - Node.js 数据使用 Buffer 解析原始字节

.net - ASP.NET 网站的选项卡

javascript - 如何启用 CORS?

php - CSS 属性未显示为使用 PHP 的事件导航元素