我想使用未设置为 DOM 元素的 jQuery 构建自定义事件。
它在 jQuery 描述中说:
jQuery.event.trigger('test');
是触发自定义事件。
但我怎么能抓住它??
提前谢谢
我想使用未设置为 DOM 元素的 jQuery 构建自定义事件。
它在 jQuery 描述中说:
jQuery.event.trigger('test');
是触发自定义事件。
但我怎么能抓住它??
提前谢谢
我想你是在问那个自定义事件(至少我试图捕捉 没有意义trigger
):它是用.bind完成的:
$('some_selector').bind('test', function() {
console.log('Test was caught'); }
);
更新:实际上不,您不需要选择器 - 只需一个对象即可成为事件的“主机”。你可能会使用这样的东西:
// taken from the comments at the Doc page
var o = {length: 3};
$(o).bind( 'custom', function(){ console.log('hi') } );
$(o).trigger('custom');
// Output
hi
hi
hi
我认为你们错过了这个问题。他不是在问您如何侦听在对象上触发的事件。他在问你如何监听通过 jQuery.event.trigger() 直接触发的事件。
我在http://www.sitepoint.com/jquery-custom-events/找到了一篇非常棒的文章。
本质上,您只需监听文档对象。
$(document).on("test", function(event, data) {
console.log(data)
});
$.event.trigger('test', [{ foo: 'bar' }]);
您应该将事件的目标元素传递给 jQuery.event.trigger(),如下所示:
jQuery.event.trigger('test', null, element);
这样当你想抓住它时,你可以使用:
$(element).on('test', fn);
你可以在jQuery源码中找到jQuery.event.trigger的定义和用法:
看完jQuery的源码,你会发现jQuery.event.trigger的定义:
jQuery.event = {
...
trigger: function( event, data, elem, onlyHandlers ) {...}
...
}
(这并不是 jQuery 的公共接口,仅供内部使用。)
和用法:
jQuery.fn.extend({
...
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
triggerHandler: function( type, data ) {
var elem = this[0];
if ( elem ) {
return jQuery.event.trigger( type, data, elem, true );
}
},
...
});
就是这样:
$(document).bind('test', function (e) {
// handler code here...
});