如何在函数引用中传递参数

时间:2014-06-11 09:16:35

标签: javascript jquery

我正在寻找一种方法来保存对jQuery中事件触发后调用的一个函数中的两个this对象的引用 - this对该方法定义的对象的引用(所以我可以使用this.anotherObjectFunction())和this引用触发事件的对象 - 以便稍后我可以使用$(this).someJQueryFunction。我想这样做的方法是将this (function object)引用作为参数传递给函数。不幸的是,这个函数是由jQuery调用的,而不是我,所以它作为参考传递,即

someFunction: function()
{
    ...
    cell.$el.on('click', 'li.multiselect-option', this.myClickFunction);
    ...
},

myClickFunction: function(objectReference)
{
    //It should be able to call methods of that object.
    objectReference.anotherFunction(); 
    //And reference to the clicked item.
    $(this).html("Don't click me anymore!!!");
}

我知道我可以做类似

的事情
cell.$el.on('click', 'li.multiselect-option', myFunction.bind(this));
...
myClickFunction: function(event)
{
    this.anotherFunction();
    $(event.currentTarget).html("Don't click me anymore!!!");
}

但是这个解决方法并没有真正回答这个问题,因为它没有显示如何传递额外的参数,并且将来可能有必要传递另一个(不,我不想将它们注册为对象)。

除非可以使用cell.$el.off()函数轻松删除它们,否则不允许使用匿名函数删除它们,而它们(还有一些其他函数与相同的对象和事件相关联)同一时间他们应该完好无损)。

更新

没有匿名功能我指的是以下解决方案:

var self = this;
cell.$el.on('click', 'li.multiselect-option', function() {
    self.MyClickFunction(self, this);
});

他们将工作,因为我必须将cell.$el.off()函数参考(3参数原型)一起使用才能删除此单个函数它,将其他函数绑定到同一元素和事件。

2 个答案:

答案 0 :(得分:1)

Jquery .on事件可以选择将参数作为参数传递给事件处理程序,如此

cell.$el.on('click', 'li.multiselect-option', {arg1:'arg1' , arg2:'arg2'} , myFunction);
...
myClickFunction: function(event)
{
    alert(event.data.arg1);
    alert(event.data.arg2);

    this.anotherFunction();
    $(event.currentTarget).html("Don't click me anymore!!!");
}

将数据传递给处理程序

  

如果向.on()提供了数据参数,并且该参数不为null或未定义,   它每次都传递给event.data属性中的处理程序   事件被触发。 data参数可以是任何类型,但如果是字符串   使用选择器必须提供或显式传递为   null,以便数据不会被误认为是选择器。最佳做法是   使用普通对象,以便可以传递多个值   属性。

或其他方式

cell.$el.on('click', 'li.multiselect-option',  function() { 

           myClickFunction("hai" , "bye");

});


myClickFunction: function(arg1, arg2)
{
   alert(arg1);

   alert(arg2);   
}

答案 1 :(得分:0)

我还建议一个无插件的问题解决方案"如何为函数引用提供参数"

实施例

function x(a){
    console.log(a);
}

setInterval('x(1)',1000);