1

当用户离开页面时,我希望具有在页面上提交多个表单的功能。有这个“你想拯救吗?” 问题,到目前为止我的代码是这样的:

function checkForChanges( ) {
  if (window.formform1Changed == true) {
    if (window.asked == false) {
      window.asked=true;
      doSave = confirm("Wanna save? Click OK")
    }
    if (window.doSaveForms || doSave) {
      window.doSaveForms = true;
      document.forms.form1.submit();
    }
  }
  if (window.formform2Changed == true) {
    if (window.asked == false) {
      window.asked=true;
      doSave = confirm("Wanna save? Click OK.")
    }
    if (window.doSaveForms || doSave) {
      window.doSaveForms = true;
      document.forms.form2.submit();
    }
  }
}

它可能看起来有点矫枉过正,但它是由我们的模板引擎自动生成的,并且可以扩展到更多的形式。

身体标签:

<body
 onLoad="init();
         window.formform1Changed=false;
         window.asked=false;
         window.doSaveForms=false;
         window.formform2Changed=false;"
 onbeforeunload="checkForChanges();">

其中一种形式的有趣部分(另一种看起来相同:

<input value="xyz" id="la" onchange="window.formform1Changed=true;" />
<input name="save" onclick="window.formform2Changed=false; window.formform1Changed=false;" type="submit" value="save" />

现在来解决问题: 如果我更改两个表单中的值并离开页面,则会弹出第一个表单的问题。我单击确定,表单已保存,但form1.submit()触发了一个新的 onBeforeUnload 事件,这打破了我的想法的整个逻辑。

现在的问题是,是否有一种方法可以在用户离开时只询问一次时提交页面上的所有表单?

非常感谢任何帮助!

谢谢。

4

2 回答 2

1

表单提交需要回发,一旦您提交第一个表单,您的页面将被重定向到该表单的“操作”,您将丢失其余表单中的信息。

在页面上拥有多个表单并不是最好的主意,但是,如果您绝对必须拥有它们,那么保存所有表单的方法是将完整的回发替换为对 Web 服务(或支架)的 AJAX 调用-单独的页面,它接受查询字符串参数,尽管它不是安全或灵活的方式)。这样您就可以通过 AJAX 调用提交每个表单,而无需页面重定向。

于 2010-03-10T15:50:40.870 回答
0

正如 SLaks 所说,您将无法以您尝试的方式提交多个表单。不过,您确实有其他一些选择。代替传统的表单提交,您可以进行某种 ajax 调用来保存您关心的表单数据。这是一个使用 jquery 和 php 的示例(链接

于 2010-03-10T15:51:41.647 回答