Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么我不能启动自定义事件?_Jquery - Fatal编程技术网

Jquery 为什么我不能启动自定义事件?

Jquery 为什么我不能启动自定义事件?,jquery,Jquery,我试图使用jquery触发自定义事件,但由于某些原因,我似乎无法触发和/或捕获它们 我正在使用jstree插件创建包含文件夹的文件系统: $('.filetree.global, .filetree.workspace').bind('select_node.jstree', function (event, data) { alert('test '); $(document).trigger( 'filePick').trigger( 'folderPick' ); }).j

我试图使用jquery触发自定义事件,但由于某些原因,我似乎无法触发和/或捕获它们

我正在使用jstree插件创建包含文件夹的文件系统:

$('.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,因为我有一些图标,它们的状态取决于选择的文件夹,我想刷新。非常感谢可能有兴趣