2012-06-21 43 views
5

我想用未设置为DOM元素的jQuery构建自定义事件。如何捕捉jQuery.event.trigger()?

它说,在jQuery的描述,即:

jQuery.event.trigger('test'); 

是触发自定义事件。

但我怎么能抓住它?

提前THX

+0

您的意思是捕获'触发器'或该自定义事件? – raina77ow

+1

是否这样? http://jsfiddle.net/6bWJ6/ – Blender

+0

我的意思是自定义事件(对不起,如果我表达自己错了).. – Moszeed

回答

8

我想你问的是自定义事件(至少它没有任何意义,我试图抓住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 
+0

是的,但是我真的需要选择器吗? ... – Moszeed

+0

谢谢,这对我有用=)... – Moszeed

+0

什么是长度属性? – Chris

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); 
     } 
    }, 
... 
}); 
0

方法如下:我

$(document).bind('test', function (e) { 
    // handler code here... 
}); 
2

想你们AR呃错过了这个问题。他并不是问你如何倾听对象上触发的事件。他问你如何监听通过jQuery.event.trigger()直接触发的事件。

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

本质上,你只是听文件对象。

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

$.event.trigger('test', [{ foo: 'bar' }]);