这就像预期的那样工作,但我不喜欢它。
$('#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))
.