2016-12-13 3 views
0

Ich habe registerAjax (e) Funktion:e.PreventDefault ist undefiniert

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

Diese Funktion wird durch diese Funktion aufgerufen wird

function registerUser() { 
registerAjax(); 

Wenn ich die app laufen, ich die Konsole Meldung „Nicht abgefangene empfangen TypeError: Kann die Eigenschaft 'preventDefault' von undefined (...) nicht lesen "

Gibt es eine einfache Lösung, um diese Ausnahme zu beheben?

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

Warum sollte Es gibt ein Ereignis, wenn du keins passierst? – Eric

+1

Warum würden Sie preventDefault auf undefined aufrufen? –

+0

Ich bin neu in diesem so, wie kann ich Benutzer erfolgreich registrieren? –

Antwort

1

Geben Sie die registerUser Referenz, statt sie zu nennen:

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

Und fügen event Parameter registerUser:

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

dies nicht tun, was Sie denken, es tut:

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

Dies ruft registerUser()sofort auf und setzt den Click-Handler auf den Rückgabewert von registerUser(), der nichts zurückgibt. Ich vermute, dass Sie dies wünschen:

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

Der Name der Funktion selbst als Variable verwendet werden kann, um die Funktion zu repräsentieren, wenn es um einen Handler übergeben. (Oder wenn Sie viel von etwas mit der Funktion tun, kurz vor dem Aufrufen. In JavaScript ist eine Funktion ein Typ wie jeder andere und kann wie jede Variable weitergegeben werden.)

Zusätzlich, müssen Sie übergeben das Ereignis bis zu Ihrer anderen Funktion. Standardmäßig wird das Click-Handler das Ereignis übergeben werden, so können Sie es verwenden:

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

In Ihrem Fall, würden Sie wollen, dass es passieren zusammen mit Ihren anderen Funktion:

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

Geist durchgebrannt wird downvoted. SO kann manchmal unglaublich sein. – jdmdevdotnet

+0

@AlGoreRhythm: Ich versuche zu sehen, ob ich vielleicht die Frage missverstanden habe, obwohl ich das Problem noch nicht bemerkt habe. Wie auch immer, man sollte niemals persönlich abstimmen. – David

+0

Nein, das OP versteht eindeutig nicht, wie das 'Ereignis' passiert wird, was Sie erklärt haben. Ich hatte eine ähnliche Antwort, wenn auch nicht so ausführlich wie deine und sie wurde abgelehnt. Es endete damit, es zu löschen, anstatt 2 Punkte zu essen, nur weil jemand heute beschließt, ein Asshat zu sein. – jdmdevdotnet