2

我正在编写一个 jQuery 事件插件,我需要将一些数据传递给一个参数。所以如果我这样使用它:

$(element).on('myevent', function(event, myargument) { console.log(myargument); });

我不想获取在处理程序中设置的myargument对象及其属性(例如name)。

那么这将如何与下面的代码一起使用?

SmartScroll.myevent = {
    setup: function() {

        var myargumentData,
            handler = function(evt) {
                var _self = this,
                    _args = arguments;

                // The data I wan't to get
                myargumentData = {
                    name: "Hello"
                };

                evt.type = 'myevent';
                jQuery.event.handle.apply(_self, _args);
            };

        jQuery(this).bind('scroll', handler).data(myargumentData, handler);

    },

    teardown: function() {
        jQuery(this).unbind('scroll', jQuery(this).data(myargumentData));
    }
};
4

2 回答 2

1

您可以修改传递给add.

$.event.special.foo = { add: function(h) {
    var hh = h.handler;
    h.handler = function(e, a) {
        hh.call(this, e, a * 2);
    };
} };

现在,让我们绑定事件:

$("body").on("foo", function(e, a) {
    console.log(a);
});

触发事件,看看会发生什么:

$("body").trigger("foo", [ 10 ]); // 20
于 2012-11-14T21:27:33.913 回答
0
on: function( types, selector, data, fn, /*INTERNAL*/ one ) 

根据消息来源。因此,如果我了解您的问题,请执行以下操作:

$(element).on('myevent',{my_data:"foo"},function(event) { 
  console.log(event.data.my_data); 
});

打印“富”

于 2012-11-14T21:17:26.243 回答