返回false不停止表单提交

Hel*_*rns 3 javascript forms jquery

我很确定这不应该那么难.我有一个表单在onsubmit上运行以下函数:

function FORMVALIDATE_add_rota_entry() {
    var rota_date = $("#rota_date").val();
    var rota_id = $("#rota_id").val();
    var am_pm = $("#am_pm").val();
    if(rota_date == "")
    {
        alert("Please enter a date.");
        return false;
    }
    if(rota_id == "error")
    {
        alert("Please select a rota from the list.");
        return false;
    }
    // check if that rota has already been entered for that date and am/pm
    $.ajax({
        async:false,
        type:"POST",
        url:"/modules/rotas/check_rota_entry_existence",
        data:{rota_date:rota_date, rota_id:rota_id, am_pm:am_pm},
        success: function(result) {
            if(result != "0")
            {
                alert("This rota has already been added to this date, "+am_pm+".");
                return false;
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

它在表单标记中通过以下方式调用:

onsubmit="return FORMVALIDATE_add_rota_entry();"
Run Code Online (Sandbox Code Playgroud)

并且它在前两个工作正常,rota_date和rota_id,警报在他们应该时出现并且它停止提交表单但是当它到达ajax调用时,它使它正常,返回正确的结果,当它发出警报应该,但返回错误似乎并没有阻止提交表单.有没有人有任何想法,因为我很难过!

谢谢!

Nic*_*own 6

你做错了.你这样做的方式,你应该让函数总是返回false:

function FORMVALIDATE_add_rota_entry() {
    var rota_date = $("#rota_date").val();
    var rota_id = $("#rota_id").val();
    var am_pm = $("#am_pm").val();
    if(rota_date == "")
    {
        alert("Please enter a date.");
        return false;
    }
    if(rota_id == "error")
    {
        alert("Please select a rota from the list.");
        return false;
    }
    // check if that rota has already been entered for that date and am/pm
    $.ajax({
        async:false,
        type:"POST",
        url:"/modules/rotas/check_rota_entry_existence",
        data:{rota_date:rota_date, rota_id:rota_id, am_pm:am_pm},
        success: function(result) {
            if(result != "0")
            {
                alert("This rota has already been added to this date, "+am_pm+".");
                return false;//this is called when the server responds....which in your case isnt happening in the first place

            }
        }
    });

    return false;//this should be at the end so 'false' is always returned to 'onsubmit'
}
Run Code Online (Sandbox Code Playgroud)

return false;if语句的唯一目的是为了防止ajax代码运行.但是在功能的最后也应该有一个.这应该是一个更容易解决的问题:

onsubmit="FORMVALIDATE_add_rota_entry();return false;"