从jQuery .on中调用多个函数(“更改”...事件)

时间:2015-04-16 12:58:39

标签: javascript jquery onchange

我想在 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很新,并且想了解原因。

4 个答案:

答案 0 :(得分:6)

您需要调用$.proxy()

中定义的函数
this.myValue.on("change", function () {
    $.proxy(self.functionOne, self)();
    $.proxy(self.functionTwo, self)();
})

请注意尾随()

答案 1 :(得分:3)

使用原生applycall代替

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();
})