Javascript在页面上提交所有表单

时间:2009-06-26 10:30:03

标签: javascript forms jsf

我正在使用jsf 1.2。当一个特定的jsp有多个具有指定id的表单时,例如当使用类似下面的内容时,jsf会给表单一个看似随机的id。

<ui:repeat>
   <h:form id="repeatingform">
      ...

我想使用javascript提交所有表单。有没有办法在不知道表格的ID的情况下做到这一点?

4 个答案:

答案 0 :(得分:5)

一次提交多个表单实际上是不可能的。问题是每个表单都需要自己单独的请求 - 提交表单基本上类似于单击链接,并且您无法一次打开页面上的所有链接(您可以通过在新选项卡/窗口中打开它们,但那是另一件事)

如果您确实希望将每个表单保持为单独的表单元素,则可以使用Aquatic的示例,

var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++) 
forms[i].submit();

但将代码运行submit()替换为使用XMLHttpRequest提交表单的代码。您可以在后台运行多个XMLHttpRequests。

答案 1 :(得分:3)

嗯,它不会那么简单。如果你使用像document.form1.submit();它会发布特定表单及其中的所有值。 因此,无需循环遍历所有表单并提交每一个表单。 这与单击每个表单的提交按钮相同,导致每个表单单独发布。 解决方案是以单个收集器形式收集每个表单中每个字段的值,并发布收集器表单。 您可以在此处阅读(包含代码示例!)更多相关信息:http://www.codetoad.com/forum/15_24387.asp

答案 2 :(得分:0)

您可以通过下一种方式访问​​页面上的所有表单

var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++) 
    forms[i].submit();

答案 3 :(得分:0)

我认为这个问题有几个部分。 1.您是否尝试在JSF中提交多个表单?有一种方法可以以不同的形式分割组件,然后在需要时提交一组选定的组件。外部标签可以在这些内部,您可以拥有尽可能多的外部标签。 (请知道:子表单是tomahawk库;但它适用于JSF)。也可以使用t:commandButton在选择的组中提交子表单。 注意子表单deocumentation的最后一段,可以提交所有带有逗号分隔id的表单。所以例如            这里有一些输入控件    

      更多控件在这里    

      整个lotta控制在这里        

这样的内容将允许您仅为要验证的表单提交选择性表单和验证组件。如果那是你真正想要做的事情。

但如果您的意图是通过单个java脚本提交这些表单我有一个小建议,javascript支持在dom树中动态查找表单标签,如上面的例子中aquatic所示。您可以通过实现在“RENDER_RESPONSE”阶段之前调用的PhaseListener来遍历这些ui元素,并遍历ComponentUITree以获取所有UI组件的名称或列表,然后通过scriplet变量或$ 2变量将它们提供给javascript支持。

如果您可以准确地列出您的问题,我可以提供更详细的答案或示例,为什么您想要一个通用的Java脚本,并且您打算并行提交多个表单,或者您打算一次提交一个(如并且当被要求时)但是通过一个共同的java脚本。

HTML表单组件的并行提交实际上是不可能的,除非你使用javascript从所有表单累积组件值,然后进行大量的手动操作。

详细说明您的实际意图。