为什么jQuery中的回调必须是匿名的



这就像预期的那样工作,但我不喜欢它。

$('#login-form').on('submit', function(event){
  event.preventDefault();
  init.login();
});
var init = {
  login: function() {
  // do login stuff
  }
};

这是我想要的,但它不起作用。

$('#login-form').on('submit', init.login(event));
var init = {
  login: function(event) {
  event.preventDefault();
  // do login stuff
  }
};

为什么?

它将起作用,您正在调用函数(作为回调给出的值将是函数的结果),而不是将其作为值传递

$('#login-form').on('submit', init.login);

init.login(event)调用函数init.login,将(不存在的)变量event传递给它。如果要将函数本身作为回调传递,请不要调用它:

$('#login-form').on('submit', init.login);

不过,在传递该函数之前,您必须声明该函数,此时init.login undefined

您已经在该行中调用该函数(使用 undefined ,还没有event)。你需要传递函数本身(而不是它的结果):

$('#login-form').on('submit', init.login);

请注意,init.login仍然是一个匿名函数,它没有名称:-)另请注意,调用该方法时this是登录表单元素,而不是init对象。如果需要,可以使用.on('submit', init.login.bind(init)) .

相关内容

  • 没有找到相关文章

最新更新