我有一个输入字段,它有两个绑定到它的事件处理程序。
验证&自动保存
显然我想在保存之前验证。如果验证失败,则将“无效”类添加到输入中,并且自动保存将在该类继续之前检查该类。
这很好用,但有没有办法保证在所有情况下自动保存之前运行验证?
答案 0 :(得分:13)
如果使用JQuery绑定事件,它可以保证处理程序的触发顺序与它们绑定的顺序相同。否则订单正式未定义。
如果你不能使用JQuery或类似的框架,你可以通过使用自己的自定义偶数绑定轻松地模拟它,其中你的通用处理程序是一个函数,它保存一系列函数并按顺序调用它们。
答案 1 :(得分:8)
通常你会有Save事件处理程序调用Validate(),如果一切正常并准备好保存,它将返回true。
function onSaved() {
if (!validate()) {
// set class
return;
}
// do the save
}
答案 2 :(得分:2)
答案 3 :(得分:0)
已经回答了 - 但只是为了添加这些知识,不能依赖事件处理程序的顺序。它可以在任何给定的实现中是可预测的,但是这可以从一个(Javascript)实现改变到下一个和/或随着时间的推移。唯一确定的是,它们都将被执行 - 但不是以什么顺序执行。
请注意,当有一个DOM对象的事件处理程序和另一个用于子对象或父对象的同一事件时,情况类似 - 首先执行哪些事件并不总是很清楚。见http://www.quirksmode.org/js/events_order.html