繁体   English   中英

e.PreventDefault是未定义的

[英]e.PreventDefault is Undefined

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

这不会按照您认为的那样做:

$("#btnRegister").on('click', registerUser());

registerUser() 立即调用registerUser()并将点击处理程序设置为registerUser()返回值 ,该不返回任何内容。 我怀疑你想要这个:

$("#btnRegister").on('click', registerUser);

函数名称本身可以在传递给处理程序时用作表示函数的变量。 (或者在使用该函数做很多事情时,只需调用它即可。在JavaScript中,函数的类型与其他类型一样,可以像任何变量一样传递。)

此外 ,您需要将事件传递给其他函数。 默认情况下,点击处理程序将传递给事件,因此您可以使用它:

function registerUser(e) {
    // e is your event
}

对于您的情况,您希望将其传递给其他函数:

function registerUser(e) {
    registerAjax(e);
    // etc.
}

传递registerUser引用而不是调用它:

$("#btnRegister").on('click', registerUser); 

并将event参数添加到registerUser

function registerUser(e) {
  registerAjax(e);
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM