多形式的陈述,在IE和谷歌Chrome(Multi-forms submission in IE a

2019-08-02 18:49发布

我有几种形式(用户可以添加新的动态形式)在一个页面上,他们都提交相同的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>

   ...

Answer 1:

您应该只能够在同一时间提交一个表单。 提交按钮必须是内部<form>标签,并且只有提交按钮是应提交表单。 隐藏的input标签应该有一个表单标签里面还有BTW。

即使通过JS做的时候,一个submit()发起新的POST请求到服务器。 你只能在一个时间一个请求,这就是为什么只有最后显示出来。 我不知道为什么它会在FF工作。

如果你需要同时提交的一切,无论如何,为什么打破它开始与? 如果你在表单中要“小节”,你可以使用<fieldset>标签。

编辑

当你运行你的脚本是一样的,如果你所有的形式有一个提交按钮会发生什么事,你点击快速为了所有的提交按钮。 点击一个提交按钮形式的数据发送给所述服务器发出的POST请求和刷新页面。 如果你足够快的页面刷新之前点击另一个按钮,您可以提交其他形式,旧的请求将被取消。

我可以想像的任何形式的数据可能可以获得服务器你这样做的方式,唯一的方法是,如果该请求接下来发生的之前发送submit()被触发。 从本质上讲,你要依靠浏览器是缓慢的,或至少处理继续脚本执行前的要求。 显然,在FF的作品,但在其他浏览器失败。 正如它应该。

编辑2

如果您需要使用相同的名称提交多个领域,使用一种形式 ,让你的领域唯一的名称。 最好的命名方案取决于你的后台如何处理表单提交。

  • item0item1
  • item.0item.1
  • Model.0.itemModel.1.item


Answer 2:

我相信你只能在一个时间只有一个提交 - 这可能是一个不好的做法,但基本上左右各重复代码的形式,并在iframe复制它,提交表单存在,要么或依靠XHR($如何。后),以模仿什么形式会做。



Answer 3:

尝试使用document.getElementById(formId).submit(); 代替。 的document.form.x,document.forms [INT],document.forms [ID],和访问形式的document.x方法不是跨浏览器引用的形式兼容的方法。

而且 - 我相信我曾经有一个问题,当我有两个名字,我的窗体上的ID。 最好的做法是使用的ID,我相信。



文章来源: Multi-forms submission in IE and Google chrome