我正在处理一个表单,当输入失去焦点时,需要触发多个事件,即模糊事件被触发。我在管理需要响应的各种事件处理程序的调用顺序时遇到了问题。
每个表单输入标记在模糊时都需要发生各种事情。
- 各种自动格式化程序,例如确保名称以大写字母开头,或根据复选框显示表单的区域
- jQuery验证
- 后验证函数,如ajax调用
到目前为止,我想出的最好的方法是依赖事件冒泡系统。因此,请确保使用jQuery.on()将来自点1的所有事件附加到比验证规则更深入DOM的元素。Jquery验证将事件侦听器附加到表单元素。
Whist这项工作有几个问题。它适用于我的三类事件,当我有更多的事件时,它很可能会成为一个问题。
有没有一种发布者/订阅者类型的系统,人们可以与jQuery一起使用,使这类系统更容易?
您看过自定义事件并启动这些事件吗?
例如,您可以在模糊代码完成后创建一个自定义的"getMeMore"事件:
$(document).on('blur', '.myInputClass', function(){
// do stuff for blur here
$(this).trigger('getMeMore');//now trigger my event
});
$(document).on('getMeMore','.myInputClass',function(){
//do my ajax to get me more here
});
编辑:基于评论:
选择器中的文档只是活动事件的锚点。参见此示例http://jsfiddle.net/MarkSchultheiss/qM2Mv/其中我基于条件在另一个事件中激发自定义事件。观察数字(它翻倍的地方),看看其他事件何时启动。我知道这是可以理解的,但希望它能给你一些可以合作的东西。我在代码中这样做,这样我就可以根据其他条件来管理"何时"事件触发,这些条件在给定时间可能存在,也可能不存在。这允许将事件触发器与事件管理分离,这就是这里的要点。请注意,我从不同的地方触发了一些自定义事件。(复选框值,并基于文本输入的长度)