【发布时间】:2015-03-11 21:41:30
【问题描述】:
我在表单上有一组输入,用于监视交互性、验证或两者。对于这两种情况,我不确定如何在不覆盖先前分配的情况下添加第二组功能。
这是一个例子。我有一个字段应该被监视以进行实时验证,并且应该被监视以进行一些实时格式化。 (是的,我可以将它们整合到同一个函数中,但我更愿意将它们分开)。
这是验证任务:
exampleField
// for live typing
.keyup($.debounce(500, debouncedValidation))
// for copy-pastes and autofills
.change(function(){
validateInput(formInValidation, $(this));
});
另外,我想独立运行一些交互式功能,如下所示:
exampleField
// for live typing
.keyup($.debounce(500, interactWithElement($(this))))
// for copy-pastes and autofills
.change(function(){
interactWithElement($(this));
});
我使用的是相同的事件,所以后者会覆盖前者。我的直觉说,有一种优雅的方法可以在两者之间添加一个实用函数,比如addEventListenerWithoutOverride(),它会查找现有事件并将它们组合起来。那是疯了吗?所述函数的虚构输出可能类似于:
exampleField
.keyup(
$.debounce(
500,
function(){
debouncedValidation();
interactWithElement($(this));
});
)
)
.change(function(){
validateInput(formInValidation, $(this));
interactWithElement($(this));
});
【问题讨论】:
-
jQuery 默认执行此操作。如果您添加一个事件处理程序,然后为同一事件添加另一个事件处理程序,两者都将运行 - 尽管无法保证执行顺序。
-
如果你可以在同一个元素上放置多个处理程序,那会解决你的问题吗? addEventListener()
-
@RoryMcCrossan 你在开玩笑-我没有费心设置测试,因为我确信 jQuery 更直接地开箱即用。谢谢!
-
您也可以使用代理作为您的处理程序,然后告诉您的代理要执行什么以及按什么顺序执行
标签: javascript jquery events combinations jquery-events