如何捕获 jQuery.event.trigger()

How to catch the jQuery.event.trigger()?

本文关键字:trigger event 何捕获 jQuery      更新时间:2023-09-26

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

它在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...
});