为jQuery特殊事件添加自定义参数

时间:2012-11-14 18:46:06

标签: javascript jquery

我正在编写一个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));
    }
};

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

on: function( types, selector, data, fn, /*INTERNAL*/ one ) 

据消息来源。 所以,如果我理解你的问题,那就做:

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

打印“foo”