【问题标题】:onsubmit still submits form even on return false from ajax verification即使从 ajax 验证返回 false,onsubmit 仍会提交表单
【发布时间】:2015-03-19 13:11:29
【问题描述】:

我正在使用 ajax 验证我的表单,我只是检查是否存在重复的用户名,如果存在则返回 false,否则返回 true。

这是我的 ajax:

function checkform(){
    var username = $("#username").val();
    $.ajax({url:"<?php echo base_url() ?>Delivery/usernamecheck/", 
        data: {username: username},
        type:'post',
        async:false,
        success: function(data){
            if(data > 0){
                $("#info").attr("class","form-group has-error");
                $("#info1").html("Duplicate Username!");
                event.preventDefault();
                return false;
            }else{
                return true;
            }
        }
    });
}

我的html:

<form class="form-signin" role="form" action="<?php echo base_url() ?>Delivery/reg/" method = "post" onsubmit=" return checkform();">
</form>

即使返回 false,表单仍会提交。知道为什么吗?

也没有错误。

【问题讨论】:

    标签: javascript php jquery ajax forms


    【解决方案1】:

    您不能通过在 ajax 响应中返回 false 来阻止提交表单,它需要在该函数中,解决方案是始终返回 false 并在 ajax 响应中重新提交:

    var secondCall = false;
    function checkform(){
        if (secondCall) {
            return;
        }
        var username = $("#username").val();
        $.ajax({url:"<?php echo base_url() ?>Delivery/usernamecheck/", 
            data: {username: username},
            type:'post',
            async:false,
            success: function(data){
                if(data > 0){
                    $("#info").attr("class","form-group has-error");
                    $("#info1").html("Duplicate Username!");
                }else{
                    secondCall = true;
                    $('.form-signin').submit();
                }
            }
        });
        return false;
    }
    

    注意最好在 JavaScript 中绑定提交事件:

    $('.form-signin').submit(checkform);
    

    【讨论】:

    • $('.form-signin').submit(checkform);
    • @magicianIam 与 html 中的 onsubmit 相同,但在 javascript 中添加。
    • 我试过并得到这个错误:未捕获的 RangeError: 超出最大调用堆栈大小。
    • @magicianIam 它可能会一直调用该函数并且从未真正提交表单,我已尝试修复该问题并编辑答案。
    • 成功了,谢谢!所以它之前所做的就像一个循环,为了打破这个循环,你引入了一些标志,但为什么会发生这种情况呢?这样我将来可能会避免这种情况。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2020-11-02
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多