有谁知道让 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?
编辑添加:
关于我的用例的更多细节。我正在开发一个依赖于自定义事件但本身不使用 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/