iye*_*yel 2 javascript jquery namespaces custom-events jquery-events
我使用过jQuery 2.2.4版,并试图捕获事件-不走运。有什么办法可以解决问题?
此代码有效:
window.addEventListener('test.namespace', e => console.log('CustomEvent with namespace captured by vanilla'));
Run Code Online (Sandbox Code Playgroud)
这不起作用:
$(window).on('test.namespace', e => console.log('CustomEvent with namespace captured by jQuery'));
const event = new CustomEvent('test.namespace', {
bubbles: true,
detail: 123
});
window.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
“常规” DOM事件系统没有名称空间的概念。window.addEventListener('test.namespace', ...)从字面上看test.namespace,它将使用您创建的名称监听事件new CustomEvent('test.namespace', ...)。
事件名称空间是jQuery中的一个概念:
事件名称可以由事件名称空间限定,该名称空间简化了删除或触发事件的过程。例如,
"click.myPlugin.simple"为此特定click事件定义myPlugin和简单名称空间。通过该字符串连接的Click事件处理程序可以与被删除.off("click.myPlugin")或.off("click.simple")不干扰连接到其他元素单击处理程序。
这里重要的是名称空间不是事件名称的一部分。这就是为什么new CustomEvent('test.namespace', ...)不起作用,但是new CustomEvent('test', ...)会的原因。
如果要触发特定名称空间的事件,则必须使用jQuery:
$(window).trigger('test.namespace', {detail: 123});
Run Code Online (Sandbox Code Playgroud)
$(window).trigger('test.namespace', {detail: 123});
Run Code Online (Sandbox Code Playgroud)
$(window).on('test.namespace', e => console.log('CustomEvent with namespace captured by jQuery'));
$(window).trigger('test.namespace', {detail: 123});Run Code Online (Sandbox Code Playgroud)