从 jQuery .on("change"... event) 中调用多个函数

Calling multiple functions from within jQuery .on("change"... event)

我想在 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 的新手,想了解原因。

改用原生 applycall

this.myValue.on("change", function() {
    self.functionOne.apply(this, arguments);
    self.functionTwo.apply(this, arguments);
});

$.proxy 采用一个函数和 returns 一个始终具有特定上下文的新函数,并且在引用返回的函数时起作用,但不是您在作为返回函数的回调永远不会被调用。

你当然可以使用 $.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);

$.proxy 方法只会 return 一个函数,但不会调用它。您可以使用:

self.functionOne.call(self);
self.functionTwo.call(self);

调用函数调用函数,传入'context'即。在函数中用作 'this' 的内容,很像在 $.proxy.

您需要调用$.proxy()中定义的函数:

this.myValue.on("change", function () {
    $.proxy(self.functionOne, self)();
    $.proxy(self.functionTwo, self)();
})

注意尾随 ()

为什么不能这么简单呢?

this.myValue.on("change", function () {
    functionOne();
    functionTwo();
})