Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果存在ajax错误,jquery将阻止表单提交_Jquery_Ajax_Forms_Submit - Fatal编程技术网

如果存在ajax错误,jquery将阻止表单提交

如果存在ajax错误,jquery将阻止表单提交,jquery,ajax,forms,submit,Jquery,Ajax,Forms,Submit,我在这里找不到我想要的答案。我使用ajax检查数据库中是否存在用户名,如果用户存在,表单中会显示一个错误。但是如果存在错误,我会阻止表单提交。我尝试了event.preventDefault(),但我不确定是正确使用它,还是错误使用它 我的JS代码是: $(".check").blur(function () { var username = $(".check").val(); $.ajax({ url: "validateUser.php",

我在这里找不到我想要的答案。我使用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();
        }
    });
});

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

您可以执行以下操作:

$("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是异步的,因此不能直接返回它。因为代码将继续运行,并且不会等待
完成
功能。

请使用
返回false
而不是
e.preventDefault()
尝试以下操作:

$(".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!');
        }
    });
});
这里有几点:
  • 您甚至没有在函数中添加
    事件
    ,而是调用了
    event.preventDefault()
  • 如果结果为“true”
  • ,您只需提交表单或运行代码即可
  • 否则,只需将
    焦点
    放回文本框并显示警报消息

  • 对表单提交和模糊进行验证

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

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

    if (result == "true") {
        $(this).closest('form').submit();
    } else {
        $(this).closest('form').submit(function(event){
            event.preventDefault();
        });
    }
    

    在blur上提交表单?@MohammadAdil-Yes-检查用户名是否在提交表单之前就已经存在使用
    返回false
    而不是
    事件.preventDefault()
    is karthikr==Vince?@MohammadAdil这是一个很好的例子:p在您试图阻止它的时候,事件已经发生了。到那时,事件已经发生了,返回false不会更好。效果很好,我必须稍微更新它以检查是否显示错误字段。如果是,那么我调用preventDefault,如果不是,那么我就不去管它。