阻止,然后重新触发javascript事件?

时间:2013-06-03 19:03:56

标签: javascript jquery javascript-events

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

我现在要做的是拦截特定输入上的document事件,然后不是阻止,我想重新触发主处理程序,传入一些额外的数据(使用jQuery的{{ 1}}语法。)

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

我的目标是:

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

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

1 个答案:

答案 0 :(得分:2)

创建custom event并使用额外数据触发

而不是

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

呼叫

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

并为此活动创建处理程序。

您可以重复使用处理程序

var handleChange = function(e) { };

$("something").on("change", handleChange);
$("something").on("changemodified", handleChange);