这与预期一样,但我不喜欢它。
$('#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
}
};
为什么?
答案 0 :(得分:8)
它会工作,你正在调用函数(作为回调给出的值将是函数的结果)而不是将其作为值传递
$('#login-form').on('submit', init.login);
答案 1 :(得分:5)
init.login(event)
调用函数init.login
,将(不存在的)变量event
传递给它。如果要将函数本身作为回调传递,请不要调用它:
$('#login-form').on('submit', init.login);
您必须在传递之前声明该功能,此时init.login
为undefined
。
答案 2 :(得分:4)
您已经在该行中调用该函数(使用undefined
,但还没有event
)。你需要传递函数本身(而不是它的结果):
$('#login-form').on('submit', init.login);
请注意,init.login
仍然是一个匿名函数,它没有名称:-)还要注意调用该方法时this
是登录表单元素,而不是init
对象。如果您需要,可以使用.on('submit', init.login.bind(init))
。