e.PreventDefault未定义

时间:2016-12-13 20:18:30

标签: javascript jquery ajax

我有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(); 
  }); 
}

2 个答案:

答案 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);
  ...
}