-1

这是我的问题。我正在尝试验证表单并确保在允许表单提交之前用户名可用。我的所有功能都正常工作,包括我的 PHP 脚本检查用户名。但是我无法阻止表单在提交时提交。我得到的是我定义的 AJAX .error(message)。萤火虫报告

throw Components.Exception("prompt aborted by user", Cr.NS_ERROR_NOT_AVAILABLE);

但是,当我调用 e.preventDefault(); 在 username_exists 函数之外,它会停止表单提交,并允许我在上述函数内部进行检查。我完全被难住了,希望你能帮忙。谢谢。

PS。我什至无法在该函数中执行简单的 alert()

$(function(){
    check_username_onsubmit();
});


function check_username_onsubmit(){
    $this = $('#username.registerForm');
    $('form.registerForm').submit(function(e){
        username_exists($this, function(data){
            if(data.found == 1){
                e.preventDefault();
                alert('Username Taken');
            }else{
                alert('Username Free');
            }
        });
        // e.preventDefault();
    });
}


function username_exists($this, callback){
    var username = $this.val();

    $.ajax({
        url : '../includes/Single Scripts/username_exist.php',
        data : {
            username : username 
        },
        type : 'POST',
        dataType : 'json',
        success : function(data){
            callback(data);
        }
    }).error(function(){
            alert('An error has occured');
    });
}
4

3 回答 3

2

提交,通过它的设计离开页面。AJAX,就其设计而言,不会离开页面。

如果您想在将表单发送到服务器之前使用 JavaScript 对其进行验证,那么请去掉提交按钮。单击时触发客户端验证脚本,如果通过,则执行 AJAX 调用。

$('#someForm').on('click','#myButton', {}, aValidationFunctionToCall);

aValidationFunctionToCall : function (event) {
    // validate stuff
    // show the user the error of their ways
    // or call your ajax
}
于 2012-05-07T19:34:30.273 回答
2

我会删除<input type="submit">并添加<button id="send">after </form>

然后,执行以下操作:

$('#send').on('click', function () {
    var uname = $('#username.registerForm').val();
    username_exists(uname, function (data) {
        if (data.found == 1) {
            alert('Username Taken');
        } else {
            alert('Username Free');
            $('form.registerForm').submit();
        }
    });
});

编辑:另外:

function username_exists(username, callback) {
    $.ajax({
        url: '../includes/Single%20Scripts/username_exist.php',
        data: {
            'username': username
        },
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            callback(data);
        }
    }).error(function () {
        alert('An error has occured');
    });
}
于 2012-05-07T19:16:25.623 回答
0

在 中check_username_onsubmit(),输入 areturn false;它将阻止表单提交。

如果您已经知道这一点,那么开始检查以确保您正确地将您的 javascript 方法附​​加到您的提交事件或提交点击事件。该函数可能甚至没有被调用。

于 2012-05-07T19:11:10.907 回答