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调用时,它使它正常,返回正确的结果,当它发出警报应该,但返回错误似乎并没有阻止提交表单.有没有人有任何想法,因为我很难过!
谢谢!
你做错了.你这样做的方式,你应该让函数总是返回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;"