返回false不停止表单提交
我很确定这应该不会那么难。 我有一个表单在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; } } }); }
它在表单标记中通过以下方式调用:
onsubmit="return FORMVALIDATE_add_rota_entry();"
并且它在前两个工作正常工作,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' }
return false;
的唯一目的return false;
在if语句中用它来阻止ajax代码运行。 但是在function的最后也应该有一个。 这应该是一个更容易解决的问题:
onsubmit="FORMVALIDATE_add_rota_entry();return false;"
去掉:
onsubmit="return FORMVALIDATE_add_rota_entry();"
在你的函数下面添加(其中my-form
是my-form
的id):
$('#my-form').submit(FORMVALIDATE_add_rota_entry);
更改:
function FORMVALIDATE_add_rota_entry() {
至:
function FORMVALIDATE_add_rota_entry(event) {
并在你的function改变:
return false;
至
event.preventDefault();
这并不总是暂停表单提交,因为ajax请求是异步的,并且内部代码不会及时运行以停止表单进程。
好的,所以在尝试了上述解决方案并没有取得绝对的成功后,我自己来了。 我完全抛弃了表单元素并发送了三个值onclick如下:
onclick="FORMVALIDATE_add_rota_entry($('#rota_date').val(), $('#rota_id').val(), $('#am_pm').val());"
然后,function变为如下:
function FORMVALIDATE_add_rota_entry(rota_date, rota_id, am_pm) { // check if that rota has already been entered for that date and am/pm $.ajax({ 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+"."); } else if(rota_date == "") { alert("Please enter a date."); } else if(rota_id == "error") { alert("Please select a rota from the list."); } else { $.post('/modules/rotas/add_rota_entry2', {rota_date:rota_date, rota_id:rota_id, am_pm:am_pm}); parent.$.fn.colorbox.close(); } } }); }
一切都是有效的!
谢谢大家输入:)}
尝试在return
语句之前使用event.preventDefault()
。
而不是使用
onsubmit="return FORMVALIDATE_add_rota_entry();"
尝试使用
onclick="return FORMVALIDATE_add_rota_entry();"
您可能需要添加return true;
在你的function结束时。