Javascript 表单在onsubmit函数完成之前提交
我正在调用JavaScript函数onsubmit of form,但表单在完成提交函数之前已提交。如果我在onsubmit函数中使用警报,它将首先完成函数,然后提交表单。我使用settimeout函数代替警报,但它不起作用。在onsubmit完成后,我如何提交表单Javascript 表单在onsubmit函数完成之前提交,javascript,jquery,Javascript,Jquery,我正在调用JavaScript函数onsubmit of form,但表单在完成提交函数之前已提交。如果我在onsubmit函数中使用警报,它将首先完成函数,然后提交表单。我使用settimeout函数代替警报,但它不起作用。在onsubmit完成后,我如何提交表单 function chat1close(name){ var abc; abc=window.frames[0].test(); $.ajax({ type:'GET', ur
function chat1close(name){
var abc;
abc=window.frames[0].test();
$.ajax({
type:'GET',
url:'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
}
});
document.getElementById("hello").innerHTML=" ";
alert("yes");
return true;
}
将
async:false
添加到ajax调用中。这将阻止它执行函数的其余部分,直到调用返回。向ajax调用添加async:false
。这将阻止它执行函数的其余部分,直到调用返回。如果chat1close
是表单submit上正在执行的函数,并且您希望同步执行代码,则在.ajax
请求上设置以下选项:
async:false,
如果chat1close
是表单提交上正在执行的函数,并且您希望同步执行代码,则在.ajax
请求上设置以下选项:
async:false,
在函数完成之前不会发送表单,但您正在函数中进行异步AJAX调用,表单在AJAX响应到达和调用成功回调函数之前发送
发送表单之前执行AJAX调用的唯一方法是使用同步AJAX调用,但这将在浏览器等待响应时冻结浏览器:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
}
});
return true;
}
但是,您可以停止发送表单,而是在AJAX响应到达后发送表单:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
$('#IdOfTheForm')[0].submit();
}
});
return false;
}
在函数完成之前不会发送表单,但是您正在函数中进行异步AJAX调用,表单在AJAX响应到达和调用成功回调函数之前发送
发送表单之前执行AJAX调用的唯一方法是使用同步AJAX调用,但这将在浏览器等待响应时冻结浏览器:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
}
});
return true;
}
但是,您可以停止发送表单,而是在AJAX响应到达后发送表单:
function chat1close(name){
var abc = window.frames[0].test();
$.ajax({
type: 'GET',
async: false,
url: 'modules/closechat.php?abc='+abc+'&name='+name,
success:function(data){
document.getElementById("hello").innerHTML=" ";
alert("yes");
$('#IdOfTheForm')[0].submit();
}
});
return false;
}
实现这一点的简单方法:
var $form = jQuery("#the_form");
var should_submit = false;
$form.submit(function () {
if (should_submit)
return true;
$.post('some/async/thing', function () {
//This is an async callback that
//will set the should submit var to true and resubmit form.
should_submit = true;
$form.submit(); //will now submit normally because should_submit is true.
});
return false;
});
实现这一点的简单方法:
var $form = jQuery("#the_form");
var should_submit = false;
$form.submit(function () {
if (should_submit)
return true;
$.post('some/async/thing', function () {
//This is an async callback that
//will set the should submit var to true and resubmit form.
should_submit = true;
$form.submit(); //will now submit normally because should_submit is true.
});
return false;
});
如果您使用的是AJAX,您应该阻止表单的本机提交操作。您能提供更多的代码吗,比如您的提交处理程序被绑定到哪里?详细说明@Diodeus注释:您的onsubmit
处理程序应该返回false代码>或用于取消“正常”表单提交。但是,如果没有看到完整的onsubmit
处理程序,我们将无法提供进一步的帮助。如果您使用AJAX,您应该阻止表单的本机提交操作。您能否提供更多的代码,例如提交处理程序的绑定位置?要详细说明@Diodeus注释:您的onsubmit
处理程序应该返回false代码>或用于取消“正常”表单提交。但是,如果不查看完整的onsubmit
处理程序,我们将无法进一步提供帮助。不,不要添加async:false
!这会使屏幕冻结。@gdoron AFAIK,没有别的办法了。AJAX是异步的,因此请求被发送,其余的请求在执行$.post()
之后执行。@gdoron如果AJAX需要在表单提交之前执行,他可以在调用中添加async:false,或者从初始函数返回false并提交表单(就此而言,执行此功能的任何其他部分)来自ajax成功处理程序。@JamWaffles-它将与async:true
一起工作:提交处理程序应返回false以防止默认表单提交,然后ajax成功函数应提交。@要解决此问题,请使用1178695,请参阅Guffa详细且解释更好的答案。不,不要添加async:false
!它将冻结scre恩。@gdoron AFAIK,没有其他方法可以做到这一点。AJAX是异步的,因此会发送请求,其余的请求都是在执行$.post()
之后执行的。@gdoron如果在提交表单之前需要执行AJAX,他可以在调用中添加async:false,或者从初始函数返回false并提交表单(就此而言,执行此功能的任何其他部分)来自ajax成功处理程序。@JamWaffles-它将使用async:true
:提交处理程序应返回false以防止默认表单提交,然后ajax成功函数应提交。@user1178695要解决此问题,请参阅Guffa的详细解释答案。除了调用.submit()之外,这基本上是正确的再次返回false。请参阅下面的示例,了解如何解决此问题。@RaySuelzer:好的,我没有想到这一点。jQuerysubmit
方法很棘手,因为它会触发submit
事件,而DOMsubmit
方法不会。简单的解决方法是使用DOM方法:$(“#IdOfTheForm”)[0].submit();
。除了调用.submit()之外,这基本上是正确的再次返回false。请参阅下面的示例,了解如何解决此问题。@RaySuelzer:好的,我没有想到这一点。jQuerysubmit
方法很棘手,因为它会触发submit
事件,而DOMsubmit
方法不会。简单的解决方法是使用DOM方法:$(“#IdOfTheForm”)[0]。提交();
。