我已经设置了一个事件处理程序document
,监听submit
和change
事件,委托给form
页面上的任何元素。这个想法是在输入改变时更新服务器(因为事件冒泡到表单),同时还允许提交整个表单。对于需要特殊处理的输入,我有一些覆盖,这很好用(因为它们在代码中的位置较高,我可以用.stopImmediatePropagation()
- 所有这些处理程序都打开来阻止主事件处理程序document
。)
我现在要做的是拦截change
特定输入上的事件,然后我不想阻止,而是重新触发主处理程序,传入一些额外的数据(使用 jQuery 的.trigger(event, [data])
语法。)
举一个简化的例子:http: //jsfiddle.net/rrEmq/3/
我的目标是:
- 维护委托事件(表单动态加载,JS加载一次)
- 避免重复代码
- 避免将主处理程序的功能分解为单独的函数
第三项是我最初的方法,我知道它可以完成工作,但我很想找到一种方法来解决这个问题,而无需重写主处理程序。显然,真正的问题在于,由于所有内容都委托给同一个元素,而且由于我使用的是e.target
,所以我不能简单地触发 DOM 树中更高的处理程序。