1

我在一页中有几个表单(用户可以动态添加新表单),它们都提交给同一个 struts2 动作。当用户单击保存按钮时,我需要提交所有这些表单。

FF 一切顺利。但是在 IE 和谷歌浏览器中,只提交了最后一个表单。

任何帮助表示赞赏。谢谢你。

每个表单的元素都是相同的,一个表单一个对象。每个表单的数据都将被添加到一个域对象中,然后该对象将被持久化到数据库中。

处理保存操作的 JavaScript 函数:

<script type="text/javascript" >
    function submit() {
        var formCnt = document.getElementById('formCnt').value;
        for(var i = 1; i <= formCnt; i++) {
            var formName = 'form' + i;
            document.forms[formName].submit();
        }
    }
</script>
...
<input type="hidden" id="formCnt" name="formCnt" value="5" />

<form action="add.htm" name="form1" id="form1" method="post" enctype="multipart/form-data" />
     <input type="text" name="item.price" id="item.price" value="" />
    ...
</form>

<form action="add.htm" name="form2" id="form2" method="post" enctype="multipart/form-data" />
     <input type="text" name="item.price" id="item.price" value="" />
    ...
</form>

    ...

<form action="add.htm" name="form5" id="form5" method="post" enctype="multipart/form-data" />
     <input type="text" name="item.price" id="item.price" value="" />
    ...
</form>

   ...
4

3 回答 3

0

您一次只能提交一份表格。提交按钮必须在<form>标签内,并且只提交提交按钮所在的表单。顺便说一句,那个隐藏input的标签也应该在表单标签内。

即使通过 JS 执行此操作,a 也会向服务器submit()发起一个新POST请求。您一次只能提出一个请求,这就是为什么只显示最后一个请求。我不知道为什么它会在 FF 中工作。

如果您无论如何都需要一次提交所有内容,为什么要从一开始就将其分解?如果您想要表单中的“小节”,您可以使用<fieldset>标签。

编辑

运行脚本时发生的情况与所有表单都有一个提交按钮一样,并且您快速单击所有提交按钮。单击一个提交按钮将该表单的数据以请求的形式发送到服务器POST并刷新页面。如果您在页面刷新之前足够快地单击另一个按钮,您可以提交另一个表单,旧的请求将被取消。

我可以想象所有表单的数据如何以您的方式到达服务器的唯一方法是,如果请求恰好在下一个submit()触发之前发送。本质上,您依赖于浏览器的速度很慢,或者至少在继续执行脚本之前处理了请求。显然这在 FF 中有效,但在其他浏览器中失败。正如它应该。

编辑 2

如果您需要提交多个具有相同名称的字段,请使用一个表单并为您的字段指定唯一名称。最佳命名方案取决于您的后端如何处理表单提交。

  • item0,item1
  • item.0,item.1
  • Model.0.item,Model.1.item
于 2009-08-27T05:29:45.947 回答
0

我相信您一次只能提交一个 - 这可能是一种不好的做法,但是基本上复制每个表单代码并将其复制到 iframe 中,在那里提交表单,或者依赖 XHR($. post ) 来模仿表单的功能。

于 2009-08-27T05:32:15.007 回答
0

尝试document.getElementById(formId).submit();改用。访问表单的 document.form.x、document.forms[int]、document.forms[id] 和 document.x 方法不是跨浏览器兼容的引用表单的方法。

另外 - 我相信我曾经在我的表格上有名字和身份证时遇到过问题。我相信最好的做法是使用 id 。

于 2009-08-27T06:02:42.917 回答