我正在寻找一种方法来保存对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参数原型)一起使用才能删除此单个函数它,将其他函数绑定到同一元素和事件。
答案 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);