如何在不修改“this”的情况下包装现有事件处理程序

How to wrap existing event handler without modifying "this"?

本文关键字:包装 情况下 程序 事件处理 修改 this      更新时间:2023-09-26

我使用一些现有的代码,有一个表单提交处理程序:

function AjaxFormSubmit(e) {
 [...]
 var form = $(this);
 [...]
}

在我的视图代码中绑定处理程序,我这样做:

$('myForm').submit(AjaxFormSubmit);

我想做的是在调用AjaxFormSubmit之前运行一些其他代码,像这样:

$('myForm').submit(function(e) {
doSomething();
AjaxFormSubmit(e);
});

问题是,在AjaxFormSubmit,调用$(this)没有得到表单元素。实现这一目标的最佳方式是什么?

您需要确保在正确的上下文中调用this

$('myForm').submit(function(e) {
  doSomething();
  AjaxFormSubmit.call(this, e);
});
$('myForm').submit(function(e) {
doSomething();
AjaxFormSubmit.call(this, e);
});