我有registerAjax(e)功能:
function registerAjax(e) {
e.preventDefault();
let userData = {
username: $("#username").val(),
password: $("#password").val(),
};
$.ajax({
method: "POST",
url: kinveyBaseUrl + "user/" + kinveyAppKey + "/",
headers: kinveyAppAuthHeaders,
data: userData,
success: registerSuccess,
error: handleAjaxError
});
function registerSuccess(userInfo) {
saveAuthInSession(userInfo);
showInfo('User registration successful.');
}
此函数由此函数调用
function registerUser() {
registerAjax();
当我运行应用程序时,我收到控制台消息" Uncaught TypeError:无法读取属性' preventDefault'未定义的(...)"
是否有任何简单的解决方案可以解决此异常?
function startApplication() {
//Bind The Form Submit Buttons
$(document).ready(function () {
$("#btnRegister").on('click', registerUser());
});
loadingBox();
//Bind the info / error boxes: hide on click
$("#infoBox, #errorBox").click(function () {
$(this).fadeOut();
});
}
答案 0 :(得分:2)
这不符合你的想法:
registerUser()
这会立即调用registerUser()
并将点击处理程序设置为$("#btnRegister").on('click', registerUser);
的返回值,它不会返回任何内容。我怀疑你想要这个:
function registerUser(e) {
// e is your event
}
函数名称本身可以用作变量来表示将函数传递给处理程序时的函数。 (或者在使用函数执行任何操作时,不要调用它。在JavaScript中,函数类似于任何其他类型,并且可以像任何变量一样传递。)
另外,您需要将事件传递给您的其他功能。默认情况下,单击处理程序将传递给事件,因此您可以使用它:
function registerUser(e) {
registerAjax(e);
// etc.
}
在您的情况下,您希望将其传递给您的其他功能:
{{1}}
答案 1 :(得分:1)
传递registerUser
引用而不是调用它:
$("#btnRegister").on('click', registerUser);
并将event
参数添加到registerUser
:
function registerUser(e) {
registerAjax(e);
...
}