【问题标题】:Event performed before binding and fired after binding绑定前执行并在绑定后触发的事件
【发布时间】:2017-03-15 23:52:47
【问题描述】:

我在 JQuery 中的事件绑定方面遇到了一些奇怪的问题。我们有很多输入,我们想知道它们的值是否被用户更改。我以这些方式附加他们的事件:

$(document).on("change", ".myClass", changed);

但有时我们必须对这些字段执行自动更改,因此我取消绑定这些事件,执行更改并再次绑定事件,以避免在这些更新中触发更改:

$(document).off("change", ".myClass");
$(".myClass").val(whatever);
$(document).on("change", ".myClass", changed);

但是,如果我们在最后一个过程之后单击其中一个输入,我们会得到更改事件触发,即使该字段在更新时没有附加任何事件。我们知道 change 事件在字段失去焦点之前不会触发,但我们不理解这种行为。

任何帮助或澄清将不胜感激。

提前致谢。

抱歉,我的意思是 changed 而不是 change()。

【问题讨论】:

  • 您需要为委托的事件处理程序提供函数的引用,而不是函数的返回值$(document).on('change', '.myClass', changed)。另请注意,您的逻辑无论如何都没有实际意义,因为以编程方式更改元素的值不会引发change 事件,请参阅:jsfiddle.net/2185v3z5
  • 我在你的例子中看到你是对的,但是在我的代码中引发了事件,所以我不得不假设我有一个我没有看到的问题。非常感谢您的帮助。

标签: javascript jquery events jquery-events


【解决方案1】:

changed() 这样的带括号的函数名会立即调用该函数。这意味着第三个参数实际上是在传递 changed 函数的返回值。您应该将行更改为:

$(document).on("change", ".myClass", changed);

现在您的 changed 函数只会在事件发生时触发。

【讨论】:

    【解决方案2】:

    更改顶行
    $(document).on("change", ".myClass", changed());
    

    $(document).on("change", ".myClass", changed);
    

    您正在调用changed() 方法并提供changed() 方法的返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2023-03-09
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多