Javascript事件处理程序顺序

Javascript事件处理程序顺序,javascript,Javascript,我有一个输入字段,它绑定了两个事件处理程序 验证并自动保存 显然,我想在保存之前进行验证。如果验证失败,则将“无效”类添加到输入中,autosave将在继续之前检查该类 这已经足够好了,但是有没有一种方法可以保证在所有情况下在自动保存之前运行验证?为什么不只附加一个处理程序--Validate--并从内部调用Autosave 有关不是问题的问题的答案,请参阅或。通常情况下,如果一切正常并准备好保存,则Save event handler call Validate()将返回true functi

我有一个输入字段,它绑定了两个事件处理程序

验证并自动保存

显然,我想在保存之前进行验证。如果验证失败,则将“无效”类添加到输入中,autosave将在继续之前检查该类


这已经足够好了,但是有没有一种方法可以保证在所有情况下在自动保存之前运行验证?

为什么不只附加一个处理程序--
Validate
--并从内部调用
Autosave


有关不是问题的问题的答案,请参阅或。

通常情况下,如果一切正常并准备好保存,则Save event handler call Validate()将返回true

function onSaved() {
  if (!validate()) {
    // set class
    return;
  }

  // do the save
}

已经回答了-但是仅仅添加这一点知识,事件处理程序的顺序是不可靠的。它在任何给定的实现中都可能是可预测的,但这可能会随着时间的推移从一个(Javascript)实现更改到下一个(Javascript)实现。唯一可以确定的是,他们都将被执行——但不是按什么顺序执行


请注意,当DOM对象有一个事件处理程序,而子对象或父对象的同一事件有另一个事件处理程序时,情况类似——首先执行哪一个并不总是很清楚。请参见

如果使用JQuery绑定事件,它将保证按照绑定处理程序的相同顺序触发处理程序。否则,该命令是官方未定义的


如果您不能使用JQuery或类似的框架,您可以通过使用自己的自定义偶数绑定轻松地模拟这一点,其中您的泛型处理程序是一个函数,它保持函数数组并按顺序调用它们。

因为它们代表单独的模块,可能一起出现,也可能不一起出现。将它们作为单个函数编写(这是显而易见的)会导致代码过度耦合。我不同意。它们是耦合的,这一事实证明了这一点,即您希望一个只在另一个运行之后发生。将它们放在一个函数中不会产生这种耦合。它承认这一点。(第二,仅仅因为你在某个函数中调用它们并不意味着它们必须总是以那种方式调用。它们仍然可以以保持其独立性的方式编写。)我知道这已经是很久以前的事了,但要补充一点,您可以将Validate重命名为ValidateAndAutoSave,以更好地暗示其预期用途,因为它看起来像validation意味着自动保存,但自动保存可以独立进行,没有隐含的关联。举个例子可以很好地回答这个问题