2012-09-17 142 views
10

对于基本的HTML表单,我想将表单分成三个选项卡,每个选项卡将包含特定的字段,并且在提交表单时,我希望三种表单中的所有数据都能够提交。以html格式提交隐藏字段

所以我具有由<ul><li>

<ul class="subnav"> 
    <li class="subnav0 current"><a href="javascript:showTab('tab1');">Tab1</a></li> 
    <li class="subnav1"><a href="javascript:showTab('tab2');">Tab2</a></li> 
    <li class="lastItem subnav2"><a href="javascript:showTab('tab3');">Tab3</a></li> 
</ul> 

和该菜单下创建的菜单,我有三个的div表示每个选项卡的:

<div class="tab1"></div> 
<div class="tab2 displayNone"></div> 
<div class="tab3 displayNone"></div> 

输入控制元件将被放入每个tab div。并且菜单导航栏中的JavaScript将通过调用每个div的show() & hide()方法来控制显示哪个选项卡。 (使用jQuery)。现在

我的问题是:

1)我希望能够提交整个形式(三级申报单中的所有控件)。但是,html表单不会在displayNone div中提交输入控件,这意味着我只能在当前正在查看的选项卡内提交数据,而不能在其他两个选项卡上提交数据。

2)当初始化tab2或tab3中的表单时,我也想在隐藏元素上做一些javascript函数。但是,由于它们是display:none,所以javascript将不起任何作用。

那么有没有什么办法可以隐藏div,但也能够提交表单并对其执行任何javascript操作?

+1

请试用jQuery UI Tabs插件:http://jqueryui.com/demos/tabs/ – diEcho

+1

谢谢@diEcho,我知道有这样一个jQuery插件,但我想我更高兴知道是否有一个解决方案,而不是依靠图书馆。 –

回答

13

按照W3C显示:无控制仍可以发送到服务器,因为它们被认为successsful控制

17.13.2成功控制

一个成功的控制是提交“有效” 。每个成功的 控件都将其控件名称与其当前值配对,作为提交的表单数据集的一部分 。必须在FORM元素中定义成功的控件 ,并且必须具有控件名称。

但是:

  • 控件被禁用不能成功。
  • 如果表单包含多个提交按钮,则只有激活的 提交按钮成功。
  • 所有“开”复选框可能是 成功。
  • 对于名称属性共享相同值 的单选按钮,只有“打开”单选按钮可能会成功登录到 。
  • 对于菜单,控件名称由一个 SELECT元素提供,值由OPTION元素提供。只有 选定的选项可能会成功。
  • 如果未选择 选项,则控件不成功,并且在提交表单 时,不会将名称和 任何值提交给服务器。
  • 文件选择的当前值是一个或多个文件名的列表 。在提交表格后,每个文件的内容 将与表格数据的其余部分一起提交。文件 内容根据表格的内容 类型打包。
  • 对象控件的当前值由对象的实现确定。

如果控制不具备的电流值

当表单提交,用户代理不需要 把它作为一个成功的控制。

此外,用户代理不应该考虑以下控件 成功:

复位按钮。其声明属性已设置的OBJECT元素。 由于样式 工作表设置而未呈现的隐藏控件和控件可能仍会成功。

例如:

<FORM action="..." method="post"> 
<P> 
<INPUT type="password" style="display:none" 
      name="invisible-password" 
      value="mypassword"> 
</FORM> 

仍然会导致价值与名义 “隐形密码”进行配对,并与形式提交。

在任何情况下,如果不似乎是工作,为什么不试试jQuery的serialize()serializeArray()每份表格上并连接所有的价值观和AJAX他们回服务器。

+0

谢谢,我想我混合了残疾和隐藏的概念。一个快速的谷歌搜索告诉我只有禁用的字段不会被提交。 –

3

关于第一点,仅仅因为输入不显示任何内容,并不意味着它不会提交这些字段。

关于你的第二点,我不太关注。你是说当你打开其中一个标签时,你想对内容做一些操作?如果是这样,那么JQuery用户界面可以让你做到这一点: -

http://jqueryui.com/demos/tabs/#event-show

你能给出一个更完整的例子,包括窗体标签和一些投入?

+0

谢谢你的回答,是的,的确是我的第一点问题。在第2点,我有一个解决方法是先做js操作,然后隐藏div,这个工作正常。 –