9

我想使用未设置为 DOM 元素的 jQuery 构建自定义事件。

它在 jQuery 描述中说:

jQuery.event.trigger('test');

是触发自定义事件。

但我怎么能抓住它??

提前谢谢

4

4 回答 4

11

我想你是在问那个自定义事件(至少我试图捕捉 没有意义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
于 2012-06-21T06:24:22.867 回答
7

我认为你们错过了这个问题。他不是在问您如何侦听在对象上触发的事件。他在问你如何监听通过 jQuery.event.trigger() 直接触发的事件。

我在http://www.sitepoint.com/jquery-custom-events/找到了一篇非常棒的文章。

本质上,您只需监听文档对象。

$(document).on("test", function(event, data) {
  console.log(data)
});

$.event.trigger('test', [{ foo: 'bar' }]);
于 2015-09-17T14:04:28.197 回答
0

您应该将事件的目标元素传递给 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 );
        }
    },
...
});
于 2015-04-11T02:08:46.140 回答
0

就是这样:

$(document).bind('test', function (e) {
  // handler code here...
});
于 2015-06-24T12:29:03.520 回答