2

我已经设置了一个事件处理程序document,监听submitchange事件,委托给form页面上的任何元素。这个想法是在输入改变时更新服务器(因为事件冒泡到表单),同时还允许提交整个表单。对于需要特殊处理的输入,我有一些覆盖,这很好用(因为它们在代码中的位置较高,我可以用.stopImmediatePropagation()- 所有这些处理程序都打开来阻止主事件处理程序document。)

我现在要做的是拦截change特定输入上的事件,然后我不想阻止,而是重新触发主处理程序,传入一些额外的数据(使用 jQuery 的.trigger(event, [data])语法。)

举一个简化的例子:http: //jsfiddle.net/rrEmq/3/

我的目标是:

  • 维护委托事件(表单动态加载,JS加载一次)
  • 避免重复代码
  • 避免将主处理程序的功能分解为单独的函数

第三项是我最初的方法,我知道它可以完成工作,但我很想找到一种方法来解决这个问题,而无需重写主处理程序。显然,真正的问题在于,由于所有内容都委托给同一个元素,而且由于我使用的是e.target,所以我不能简单地触发 DOM 树中更高的处理程序。

4

1 回答 1

2

创建自定义事件并使用额外数据触发

代替

$(this).trigger("change", data);

称呼

$(this).trigger("changemodified", data);

并为此事件创建一个处理程序。

您可以重用处理程序

var handleChange = function(e) { };

$("something").on("change", handleChange);
$("something").on("changemodified", handleChange);
于 2013-06-03T19:11:21.223 回答