e.PreventDefault 未定义
2016-12-13
3107
我有 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();
当我运行应用程序时,我收到控制台消息“未捕获的 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();
});
}
2个回答
这并没有像您想象的那样执行:
$("#btnRegister").on('click', registerUser());
这会立即调用
registerUser()
,并将点击处理程序设置为
registerUser()
的
返回值
,该处理程序不会返回任何内容。我怀疑您想要的是:
$("#btnRegister").on('click', registerUser);
在将函数传递给处理程序时,函数名称本身可以用作表示该函数的变量。(或者在使用该函数执行大多数操作时,除了调用它之外。在 JavaScript 中,函数是一种与其他类型一样的类型,可以像任何变量一样传递。)
此外 ,您需要将事件传递给其他函数。默认情况下,点击处理程序将传递事件,因此您可以使用它:
function registerUser(e) {
// e is your event
}
就您而言,您需要将其传递给其他函数:
function registerUser(e) {
registerAjax(e);
// etc.
}
David
2016-12-13
传递
registerUser
引用而不是调用它:
$("#btnRegister").on('click', registerUser);
并将
event
参数添加到
registerUser
:
function registerUser(e) {
registerAjax(e);
...
}
Igor
2016-12-13