Jquery 在ajax检查后停止并重新启动submit()
最近我问了一个问题[],但它没有给我答案。下面是我想做的,你可以看到我在上面链接的第一次尝试:Jquery 在ajax检查后停止并重新启动submit(),jquery,ajax,Jquery,Ajax,最近我问了一个问题[],但它没有给我答案。下面是我想做的,你可以看到我在上面链接的第一次尝试: 用户提交表单 停止默认提交操作 检查数据库中是否存在类似的条目 如果确实如此,则显示一条通知,询问他们是否仍要提交,并提供一个允许他们仍要提交的选项(启用默认操作并提交) 如果没有,则启用表单上的默认操作并让其提交 我不知所措。感谢您的帮助。谢谢大家 编辑Simeon:以下是我在您的解决方案中使用的代码: var forceSubmitForm = false; $('#purchaser_cont
var forceSubmitForm = false;
$('#purchaser_contact').submit(function(){
if(forceSubmitForm) return true;
if( $("#id").val()=="" ){
if( $("#fname").val()=='' || $("#city").val()=='' ){ alert('First Name and City are required fields. Please fill these in before continuing.'); return false; }
$.ajax({
type: "POST",
url: 'ajax/contactSearch.php',
data: ({ fname: $("#fname").val(), lname: $("#lname").val(), city: $("#city").val(), state: $("#state").val() }),
success: function(d) {
var obj = JSON.parse( d );
if(obj.result != 0){
$("#contactSearch").remove();
$("#button-wrapper").before('<div id="contactSearch">'+obj.result+'</div>');
$("#contactSearch").slideToggle('slow');
} else {
forceSubmitForm = true;
$('#purchaser_contact').submit(); // Form will submit
}
}
});
return false;
} //END IF empty id
});
var forceSubmitForm=false;
$(“#买方_联系人”)。提交(功能(){
if(forceSubmitForm)返回true;
如果($(“#id”).val()=“”){
如果($(“#fname”).val()=''(“#city”).val()=''){alert($(名字和城市是必填字段。请在继续之前填写它们。);返回false;}
$.ajax({
类型:“POST”,
url:'ajax/contactSearch.php',
数据:({fname:$(“#fname”).val(),lname:$(“#lname”).val(),city:$(“#city”).val(),state:$(“#state”).val(),
成功:功能(d){
var obj=JSON.parse(d);
如果(对象结果!=0){
$(“#contactSearch”).remove();
$(“#按钮包装”)。在(“”+obj.result+“”)之前;
$(“#contactSearch”).slideToggle('slow');
}否则{
forceSubmitForm=true;
$(“#买方_联系人”).submit();//表单将提交
}
}
});
返回false;
}//如果id为空,则结束
});
直到第二次按下提交按钮(即,$(“#采购商_联系人”)。提交();
不会提交表单),此操作才起作用
编辑这对我来说从来都不起作用,但Simeon的答案是最接近的,他声称它适用于所有主要浏览器,因此如果它对某人有帮助,那就太好了。您可以通过向提交事件添加回调函数来处理表单。如果要停止提交,可以对事件使用preventDefault()或返回false
$('form').submit(function(event) {
event.preventDefault();
//do stuff, you can put your ajax call here
...
if(fail) { return false; }
else { return true; }
});
您可以通过向submit事件添加回调函数来处理表单。如果要停止提交,可以对事件使用preventDefault()或返回false
$('form').submit(function(event) {
event.preventDefault();
//do stuff, you can put your ajax call here
...
if(fail) { return false; }
else { return true; }
});
这就是您正在寻找的解决方案
var forceSubmitForm = false;
$('#myForm').submit(function(){
if(forceSubmitForm) return true;
$.ajax({
// ...
success: function(data){
if(data.entry != 'OK'){ // or whatever check
forceSubmitForm = true;
$('#myForm').submit(); // Form will submit
}else{
// Form will not be submitted
}
}
});
return false;
});
编辑
为了向自己证明这种方法是有效的,我创建了一个带有表单和提交按钮的示例页面。这在所有主要浏览器中都运行良好:
$(function(){ // On DOM ready
var forceSubmitForm = false;
$('#purchaser_contact').live('submit', function() {
if (forceSubmitForm){
alert('submitting');
return true;
}
// A callback function works in the same manner as a timeout
setTimeout(function(){
forceSubmitForm = true;
$('#purchaser_contact').submit();
}, 1500); // Submit after 1,5 seconds
return false; // Do not submit immediately
});
});
这就是您正在寻找的解决方案
var forceSubmitForm = false;
$('#myForm').submit(function(){
if(forceSubmitForm) return true;
$.ajax({
// ...
success: function(data){
if(data.entry != 'OK'){ // or whatever check
forceSubmitForm = true;
$('#myForm').submit(); // Form will submit
}else{
// Form will not be submitted
}
}
});
return false;
});
编辑
为了向自己证明这种方法是有效的,我创建了一个带有表单和提交按钮的示例页面。这在所有主要浏览器中都运行良好:
$(function(){ // On DOM ready
var forceSubmitForm = false;
$('#purchaser_contact').live('submit', function() {
if (forceSubmitForm){
alert('submitting');
return true;
}
// A callback function works in the same manner as a timeout
setTimeout(function(){
forceSubmitForm = true;
$('#purchaser_contact').submit();
}, 1500); // Submit after 1,5 seconds
return false; // Do not submit immediately
});
});
以下是jQuery示例(未测试):
以下是jQuery示例(未测试):
本质上,您希望在提交表单时运行一个函数,然后在函数为负时使表单操作短路。这样做应该可以:
$("form#myForm").submit(function(){
if(someCustomFunction()){//do the check
event.preventDefault; //short circuit
someOtherCustomFunction();//display your alternative
}
});
本质上,您希望在提交表单时运行一个函数,然后在函数为负时使表单操作短路。这样做应该可以:
$("form#myForm").submit(function(){
if(someCustomFunction()){//do the check
event.preventDefault; //short circuit
someOtherCustomFunction();//display your alternative
}
});
这让我发疯,没有解决方案,它要么不提交表单,要么进入无限循环提交表单。所以我把submit按钮变成了常规按钮。然后在ajax循环中提交表单。这意味着您不必担心停止submit按钮的默认操作,因为它只是一个常规按钮
<form id="loginForm" method="post" action="login.php">
<input type="text" name="username" id="username">
<input type="button" value="Log in" id="btnDoSomething">
</form>
此外,如果用户按Enter键,则您希望执行ajax请求,然后再提交,因此此代码段也很方便:
// If they hit the enter button, run the same method
$('#loginForm').bind('keypress', function(e)
{
if (e.keyCode == 13)
{
$(this).find("#btnDoSomething").click();
}
});
很好用 这让我抓狂,没有解决方案,它要么不提交表单,要么进入无限循环提交表单。所以我把submit按钮变成了常规按钮。然后在ajax循环中提交表单。这意味着您不必担心停止submit按钮的默认操作,因为它只是一个常规按钮
<form id="loginForm" method="post" action="login.php">
<input type="text" name="username" id="username">
<input type="button" value="Log in" id="btnDoSomething">
</form>
此外,如果用户按Enter键,则您希望执行ajax请求,然后再提交,因此此代码段也很方便:
// If they hit the enter button, run the same method
$('#loginForm').bind('keypress', function(e)
{
if (e.keyCode == 13)
{
$(this).find("#btnDoSomething").click();
}
});
很好用 我知道我正在寻找一条旧线索,但我最近遇到了这个问题,我想我会为任何一个偶然发现这条线索的人提供一个答案。我的解决方案是使
$.ajax
调用同步
这就是我的工作原理:
var formShouldSubmit = false;
$("form#my_form").bind("submit", function(){
$.ajax({
url: "my_form_validate.php",
data: $(this).serialize(),
success: function(data){
if ( data.valid ){
formShouldSubmit = true;
}
else{
$("#error").html('Invalid entry');
}
},
async: false,
dataType: "json"
});
if ( !formShouldSubmit ){
return false;
}
});
我知道我正在寻找一条旧线索,但我最近遇到了这个问题,我想我会为任何一个偶然发现这条线索的人提供一个答案。我的解决方案是使
$.ajax
调用同步
这就是我的工作原理:
var formShouldSubmit = false;
$("form#my_form").bind("submit", function(){
$.ajax({
url: "my_form_validate.php",
data: $(this).serialize(),
success: function(data){
if ( data.valid ){
formShouldSubmit = true;
}
else{
$("#error").html('Invalid entry');
}
},
async: false,
dataType: "json"
});
if ( !formShouldSubmit ){
return false;
}
});
@Simeon这很接近,但是如果ajax调用没有返回匹配,则需要再次单击submit按钮。我希望它在没有匹配的情况下自动提交表单(我认为这是您的意图)。当然,您必须编辑成功函数中的代码以满足您的需要。。。我在那里写了一条评论:“或者随便什么检查”,并向您展示了如何做到这一点。但是,如果你对这些问题一无所知,我可以用你在另一个问题中的特定代码来编写和编辑答案。即使我使用自己的支票,你的解决方案也不起作用$(“#myForm”).submit()不会提交表单,因为它没有正确传递
forceSubmitForm
值。是的。它设置forceSubmitForm=true,这使得表单在下次调用.submit()时立即提交。看看submit函数的第一行,如果forceSubmitForm变量设置为true,调用时返回true。我非常希望它能工作。可悲的是,它一秒钟也没有