0

我无法找到我在这里寻找的答案。我正在使用 ajax 检查数据库中是否存在用户名,如果用户存在,则表单中会显示错误。但是,如果存在该错误,我会尝试阻止提交表单。我已经尝试过 event.preventDefault() 但我不确定我是否正确使用它,或者我是否使用错误。

我的 JS 代码是:

$(".check").blur(function () {
    var username = $(".check").val();
    $.ajax({
        url: "validateUser.php",
        type: "post",
        data: "username=" + username
    }).done(function (result) {
        if (result == "true") {
            // CODE TO RUN IF ERROR DOESN'T EXIST
        } else {
            // CODE TO RUN IF ERROR DOES EXIST
            // CREATE THE ERROR MESSAGE AND DISPLAYS IT
            event.preventDefault();
        }
    });
});
4

6 回答 6

1

对表单提交以及模糊进行验证。

function checkUsername(username) {
    var username = $(".check").val();
    return $.ajax({
        url: "validateUser.php",
        type: "post",
        data: "username=" + username
    }).then(function (result) {
        var def = $.Deferred();
        if (result == "true") {
            // CODE TO RUN IF ERROR DOESN'T EXIST

            def.resolve();
        } else {
            // CODE TO RUN IF ERROR DOES EXIST
            // CREATE THE ERROR MESSAGE AND DISPLAYS IT

            def.reject();
        }
        return def.promise();
    });
}

$(".check").blur(checkUsername);
$("#myform").submit(function(e){
    var self = this;
    e.preventDefault();
    checkUsername().done(function(){
        // username was ok
        self.submit();
    });
});
于 2013-04-18T18:41:13.030 回答
0

根据您的评论,我认为您应该尝试这个:

if (result == "true") {
    $(this).closest('form').submit();
} else {
    $(this).closest('form').submit(function(event){
        event.preventDefault();
    });
}
于 2013-04-18T18:54:47.643 回答
0

为了防止您的表单提交,您必须调用处理程序preventDefault()event实例以提交表单的 JavaScript 事件。

于 2013-04-18T18:36:11.623 回答
0

你可以这样做:

$("form").submit(function(){
    return !$(this).hasClass("error");
});

$(".check").blur(function () {
   var username = $(".check").val();
    $.ajax({
        url: "validateUser.php",
        type: "post",
        data: "username=" + username
    }).done(function (result) {
        if (result == "true") {
            $("form").removeClass('error')
        } else {
            $("form).addClass("error");
        }
    });
});

因此,您的 ajax 将添加一个类错误或在其有效时将其删除。如果表单被提交,如果它有类错误,它会被取消。

Ajax 是异步的,因此您不能直接返回它。因为代码会继续运行而不是等待done函数。

于 2013-04-18T18:36:29.043 回答
0

使用return false 而不是e.preventDefault().

于 2013-04-18T18:37:17.530 回答
0

尝试这个:

$(".check").blur(function (event) {

    // Prevent Default the event here...
    event.preventDefault(); 

    var username = $(".check").val();
    $.ajax({
        url: "validateUser.php",
        type: "post",
        data: "username=" + username
    }).done(function (result) {
        if (result == "true") {
            // CODE TO RUN IF ERROR DOESN'T EXIST
            $("form").submit();  
        } else {
            // CODE TO RUN IF ERROR DOES EXIST
            // CREATE THE ERROR MESSAGE AND DISPLAYS IT                             
            $(this).focus();
            alert('An error occurred!');
        }
    });
});

这里有几点:

  1. 您甚至没有event在函数中添加 ,而是在调用event.preventDefault().
  2. 如果结果是"true",您可以简单地提交表单或运行您的代码。
  3. 否则,只需将focus背面放回文本框并显示警告消息。
于 2013-04-18T18:40:03.000 回答