2010-12-03 74 views
0

我们使用JQuery的形式plugin到SUMIT我们的形式:JQuery表单插件 - 表单提交之前的用户确认提示?

var options = { 
      dataType: 'json', 
      beforeSubmit: createposPreSubmit, 
      success:  createposPostSubmit, 
      error: function(xhr) { handleError(xhr, 'Error in Create Pos grid form submission'); } 
    }; 

    $('#form-createpos').ajaxForm(options); 

我们要dispaly使用JQuery UI的dialog方法之前提交的形式进入/取消确认提示。

问题是dialog是异步的,所以我们不能等待用户的回应。我们从beforeSubmit返回false。但我无法弄清楚如何触发表单提交,如果用户选择继续:

这些都是在我们的模态对话框的按钮:

function createposPreSubmit(formData, jqForm, options) { 

... 

var buttons = { 
    "Continue": function() { 
     $(this).dialog("close"); 
     //HOW CAN WE SUBMIT FORM?? 
     disableSubmit($("#submit-createpos")); 
    }, 
    "Cancel": function() { 
     $(this).dialog("close"); 
    } 
}; 

//Show dialog 

//Always return false 
return false; 
} 

在继续按钮功能jqForm.submitjqForm[0]不要” t似乎正常工作。 jqForm[0]确实似乎提交表单,但浏览器以“奇怪”的方式行事。

??

+0

是什么浏览器您使用?如果它是IE浏览器,预计奇怪的行为;)你是说jQuery`$('element')。submit();`函数不工作?我将不得不看看剩下的代码是什么(像`disableSubmit()`函数)... – Blender 2010-12-03 15:17:42

回答

0

我结束了使用这种方法:

$('#form-createpos').submit(function() { 
    var options = { 
     success: myfunc //WE DON'T NEED A PRESUBMIT HANDLER 
    }; 

    var buttons = { 
     "Continue": function() { 
      $(this).dialog("close"); 
      theForm.ajaxSubmit(options); //MANUALLY SUBMIT FORM 
     }, 
     "Cancel": function() { 
      $(this).dialog("close"); 
     } 
    }; 

    //Show JQuery dialog 
}); 
1

如果我理解正确,您希望“预先提交”您的表单,以便在他们接受时,希望不需要做更多工作,或者最糟糕的是,他们只需等待当前请求饰面。

我建议你使用一个全局变量,最初为空,并在它们'提交'时将其标记为真。当您收到“预先提交”的回调时,请检查全局变量的状态。如果是这样,请继续提交。如果它是假的,什么都不要做。如果它为空,表示回调在关闭对话框之前完成,这意味着您需要第二个全局变量初始为null,您可以在这种情况下将其设置为true,以便如果您在“继续”中发现它为真'按钮动作,你会立即开始而不是等待。

我期望你的代码看起来是这样的:

var ajaxPreSubmitOk = null; 
var dialogSubmitOk = null; 
var buttons = { 
    "Continue": function() { 
     $(this).dialog("close"); 
     dialogSubmitOk = true; 
     if(ajaxPreSubmitOk !== null && ajaxPreSubmitOk) { 
      // Presubmit returned and everything is ok.. proceed! 
      callSubmit(); 
     } else if (ajaxPreSubmitOk === null) { 
      // Gotta wait still 
      disableSubmit($("#submit-createpos")); 
     } 
    }, 
    "Cancel": function() { 
     // Regardless of presubmit outcome, do nothing 
     dialogSubmitOk = false; 
     $(this).dialog("close"); 
    } 
}; 

function ajaxFormCallback() { 
    // If callback success 
    if(true) { 
     ajaxPreSubmitOk = true; 
     if(dialogSubmitOk !== null && dialogSubmitOk) { 
      // User already clicked continue. We're good! 
      callSubmit(); 
     } 
    // else callback fail 
    } else { 
     // Regardless of outcome, do nothing 
     ajaxPreSubmitOk = false; 
    } 
} 

function callSubmit() { 
    enableSubmit($("#submit-createpos")); 
    ajaxPreSubmitOk = null; 
    dialogSubmitOk = null; 

    // What do do when everything goes as planned 
}