Jquery 为什么我不能启动自定义事件?
我试图使用jquery触发自定义事件,但由于某些原因,我似乎无法触发和/或捕获它们 我正在使用jstree插件创建包含文件夹的文件系统:Jquery 为什么我不能启动自定义事件?,jquery,Jquery,我试图使用jquery触发自定义事件,但由于某些原因,我似乎无法触发和/或捕获它们 我正在使用jstree插件创建包含文件夹的文件系统: $('.filetree.global, .filetree.workspace').bind('select_node.jstree', function (event, data) { alert('test '); $(document).trigger( 'filePick').trigger( 'folderPick' ); }).j
$('.filetree.global, .filetree.workspace').bind('select_node.jstree', function (event, data) {
alert('test ');
$(document).trigger( 'filePick').trigger( 'folderPick' );
}).jstree({
/*stuff*/
});
在代码的后面,我将filePick和folderPick事件绑定到具有特定类的元素,并告诉它们在捕获事件时发出测试消息警报:
$('.folder-action').bind( 'folderPick', function(e, data) {
alert('test 2');
} );
不幸的是,警报从未被触发,我不知道为什么。jquery文档对我来说似乎非常清楚,我遵循了一个不同的教程,它似乎也表明我的代码应该可以工作,但事实并非如此!啊
“测试1”收到警报,但“测试2”未收到警报。另外,我安装了Eventbug Firebug扩展,我可以看到我对filePick的绑定已注册,这使我相信filePick和folderPick从未被触发过。这是因为您试图触发文档上的事件,您需要执行以下操作:
$('.folder-action').trigger( 'folderPick' );
而不是:
$(document).trigger( 'folderPick' );
比如说。绑定事件时,将其绑定到DOM元素上。当您想再次调用它时,您需要选择相同的DOM元素。。。或者像Dan Herberts的例子那样全局触发事件
如果您不想这样做,只需创建一个函数,这是因为您试图触发文档上需要执行的事件:
$('.folder-action').trigger( 'folderPick' );
而不是:
$(document).trigger( 'folderPick' );
比如说。绑定事件时,将其绑定到DOM元素上。当您想再次调用它时,您需要选择相同的DOM元素。。。或者像Dan Herberts的例子那样全局触发事件
如果您不想这样做,只需使函数jQuery事件冒泡,而不是冒泡。这意味着当您触发文档上的事件时,它不会向下触发文档中的元素。可以在该元素上触发事件,也可以全局触发事件 要在该元素上触发,请执行以下操作:
$('.folder-action').trigger( 'folderPick' );
$.event.trigger( 'folderPick' );
要全局触发事件以便所有订阅的元素都获得事件,请执行以下操作:
$('.folder-action').trigger( 'folderPick' );
$.event.trigger( 'folderPick' );
jQuery事件向上冒泡,但不向下冒泡。这意味着当您触发文档上的事件时,它不会向下触发文档中的元素。可以在该元素上触发事件,也可以全局触发事件 要在该元素上触发,请执行以下操作:
$('.folder-action').trigger( 'folderPick' );
$.event.trigger( 'folderPick' );
要全局触发事件以便所有订阅的元素都获得事件,请执行以下操作:
$('.folder-action').trigger( 'folderPick' );
$.event.trigger( 'folderPick' );
您正在触发文档上的自定义事件,但已将自定义事件的事件侦听器绑定到.folder操作 DOM事件 进入DOM捕获阶段,直到 他们到达了目标 冒泡阶段是DOM的冒泡阶段。 但是jQuery自定义事件 在目标处触发在目标处然后 冒泡阶段是DOM的冒泡阶段。 因此,当引发自定义事件时,它将在文档中引发,然后冒泡,因此在.folder操作中永远不会引发,因此不会触发警报
您需要为文档上的自定义事件绑定事件侦听器,或在.folder action.上触发它们 您正在触发文档上的自定义事件,但已将自定义事件的事件侦听器绑定到.folder操作 DOM事件 进入DOM捕获阶段,直到 他们到达了目标 冒泡阶段是DOM的冒泡阶段。 但是jQuery自定义事件 在目标处触发在目标处然后 冒泡阶段是DOM的冒泡阶段。 因此,当引发自定义事件时,它将在文档中引发,然后冒泡,因此在.folder操作中永远不会引发,因此不会触发警报
您需要为文档上的自定义事件绑定事件侦听器,或在.folder action.上触发它们 $event.trigger的+1我不知道这是可能的,sexy@meo我不认为jQuery文档中有正式的文档记录。如果有,我还没有找到它,或者我会在我的答案中链接到它。但是,如果你在谷歌上搜索定制的全局jQuery事件,你会发现很多解释它用法的文章。谢谢,这正是我想要的。我正在考虑使用$.event.trigger,因为我有一些图标,它们的状态取决于选择的文件夹,我想刷新。非常感谢可能对$.event.trigger感兴趣+1我不知道这是可能的,sexy@meo我不认为jQuery文档中有正式的文档记录。如果有,我还没有找到它,或者我会在我的答案中链接到它。但是,如果你在谷歌上搜索定制的全局jQuery事件,你会发现很多解释它用法的文章。谢谢,这正是我想要的。我正在考虑使用$.event.trigger,因为我有一些图标,它们的状态取决于选择的文件夹,我想刷新。非常感谢可能有兴趣