如何捕获jQuery.event.trigger()?
我想使用未设置为DOM元素的jQuery构建自定义事件。
它在jQuery描述中说:
jQuery.event.trigger('test');
是触发自定义事件。
但我怎么能抓住它?
提前thx
我想你问的是那个自定义事件(至少我试图抓住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... });