2016-12-13 54 views
0

我有registerAjax(e)中函数: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'“

有没有解决此异常的简单解决方案?

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

为什么要在undefined上调用preventDefault? –

+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。有时候SO可能难以置信。 – jdmdevdotnet

+0

@AlGoreRhythm:我试图看看我是否可能误解了这个问题,尽管至今还没有注意到这个问题。无论哪种方式,都不应该亲自采取降压措施。 – David

+0

没有OP显然不明白'事件'如何通过,你解释。我有一个类似的答案,虽然不像你的那样精心制作,而且是低调的。最终删除它,而不是因为今天有人决定成为一个屁股而不吃2分。 – jdmdevdotnet