2016-12-13 6 views
0

У меня есть функция registerAjax (е):e.PreventDefault неопределен

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» undefined (...) »

Есть ли какое-либо простое решение для устранения этого исключения?

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(); 
    }); 
} 
+6

Почему произойдет ли событие, когда вы его не пройдете? – Eric

+1

Зачем вы называть preventDefault для undefined? –

+0

Я новичок в этом, так как я могу зарегистрировать пользователя успешно? –

ответ

1

Пропустите registerUser ссылку вместо вызова его:

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

И добавить event параметр registerUser:

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

Это не делает то, что вы думаете, он делает:

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

Это вызывает registerUser()сразу и устанавливает обработчик кликов на значение возврата из registerUser(), которое ничего не возвращает. Я подозреваю, что вы хотите:

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

Имя функции само по себе может быть использован в качестве переменной для представления функции при переходе его в обработчик. (Или, когда вы делаете что-либо с функцией, не ссылаясь на нее. В JavaScript функция является типом, как и любая другая, и может передаваться как любая переменная.)

Дополнительно, вам необходимо пройти событие через вашу другую функцию. По умолчанию обработчик щелчка будет передан событие, так что вы можете использовать его:

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

В вашем случае, вы хотите, чтобы передать его на свою другую функцию:

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

Разум взорван, это получает downvoted. Иногда это может быть невероятно. – jdmdevdotnet

+0

@AlGoreRhythm: Я пытаюсь понять, не понял ли я этот вопрос, хотя пока не заметил проблемы. В любом случае, никто никогда не должен принимать нисходящие голоса лично. – David

+0

Нет, очевидно, что ОП не понимает, как проходит «событие», которое вы объяснили. У меня был ответ, похожий, хотя и не такой сложный, как ваш, и он был занижен. Закончилось удаление его, а не есть 2 балла только потому, что кто-то решает быть asshat сегодня. – jdmdevdotnet