簡體   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