【问题标题】:Calling multiple functions from within jQuery .on("change"... event)从 jQuery .on("change"... event) 中调用多个函数
【发布时间】:2015-04-16 12:58:38
【问题描述】:

我想在 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 还是很陌生,想了解原因。

【问题讨论】:

    标签: javascript jquery onchange


    【解决方案1】:

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

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

    注意结尾的()

    【讨论】:

    • 哇,我花了一段时间才发现 :)
    • 嗯,为什么不直接self.functionOne()? ;)
    【解决方案2】:

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

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

    调用函数调用函数,你可以传入“上下文”,即。在函数中用作“this”的东西,就像在 $.proxy 中一样。

    【讨论】:

      【解决方案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);
      

      【讨论】:

        【解决方案4】:

        为什么不能这么简单?

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

        【讨论】:

        • 我猜this != self
        • 是什么让您认为他的功能在当前范围内可用?
        • 好点@FelixKling 但是,他不是在代理自己,还是当前范围?
        猜你喜欢
        • 1970-01-01
        • 2018-10-30
        • 2014-02-12
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 2020-07-26
        • 2018-10-11
        • 2018-06-16
        相关资源
        最近更新 更多