我想在 myValue 更改时调用两个函数,虽然这样可以正常工作:
this.myValue.on("change", $.proxy(self.functionOne, self));
this.myValue.on("change", $.proxy(self.functionTwo, self));
在这种情况下都没有调用函数:
this.myValue.on("change", function () {
$.proxy(self.functionOne, self);
$.proxy(self.functionTwo, self);
})
如果我不能在这样的一个更改事件中调用这两个函数,对我来说并不是什么大不了的事,但我对jQuery很新,并且想了解原因。
答案 0 :(得分:6)
您需要调用$.proxy()
:
this.myValue.on("change", function () {
$.proxy(self.functionOne, self)();
$.proxy(self.functionTwo, self)();
})
请注意尾随()
。
答案 1 :(得分:3)
使用原生apply
或call
代替
this.myValue.on("change", function() {
self.functionOne.apply(this, arguments);
self.functionTwo.apply(this, arguments);
});
$.proxy
接受一个函数并返回一个新函数,该函数将始终具有特定的上下文,并且在引用返回的函数时起作用,但不是在回调函数中作为返回函数执行它的方式永远不会被称为。
您当然可以使用$.proxy
并只调用返回的函数
this.myValue.on("change", function () {
$.proxy(self.functionOne, self)();
$.proxy(self.functionTwo, self)();
});
或者只是让jQuery处理它,它会优化事件并使用内部队列
this.myValue.on("change", self.functionOne);
this.myValue.on("change", self.functionTwo);
答案 2 :(得分:3)
$.proxy
方法只会返回一个函数,但不会调用它。您可以使用:
self.functionOne.call(self);
self.functionTwo.call(self);
调用函数调用函数,然后传入'上下文'即。什么在函数中被用作'this',就像在$ .proxy中一样。
答案 3 :(得分:0)
为什么你不能这么称呼它?
this.myValue.on("change", function () {
functionOne();
functionTwo();
})