Javascript 显示中的提交表单字段:无元素

Javascript 显示中的提交表单字段:无元素,javascript,css,forms,Javascript,Css,Forms,我有一个长的表格,我已经分为6个步骤。加载表单时,将加载所有步骤,但只有第一步可见。其余的CSS为display:none,因此它们是隐藏的。当一个步骤完成并通过Javascript验证时,当前步骤设置为display:none,新步骤设置为display:block。在最后一步,用户提交表单。但是,正如预期的那样,只提交页面上display:block元素中的字段。元素中显示为“无”的所有已完成字段将被忽略 是否有方法提交显示:none元素内的字段 如果没有,还有其他方法可以达到同样的效果吗?

我有一个长的表格,我已经分为6个步骤。加载表单时,将加载所有步骤,但只有第一步可见。其余的CSS为
display:none
,因此它们是隐藏的。当一个步骤完成并通过Javascript验证时,当前步骤设置为
display:none
,新步骤设置为
display:block
。在最后一步,用户提交表单。但是,正如预期的那样,只提交页面上
display:block
元素中的字段。元素中显示为“无”的所有已完成字段将被忽略

是否有方法提交
显示:none
元素内的字段


如果没有,还有其他方法可以达到同样的效果吗?

将它们改为
可见性:隐藏
位置:绝对
。这些字段将不会以
显示:无
的方式发送到服务器,而是以
可见性:隐藏的方式发送到服务器。通过将“位置”切换到“绝对”,您应该可以获得相同的视觉效果


更新在任何当前浏览器中(截至2015年11月),这似乎不再是一个问题。即使显示设置为“无”,也会提交字段。但是,“禁用”的字段将继续不提交。

HTML4第17.13.2节明确指出,即使使用display:none的隐藏控件也可能对提交有效


因此,如果浏览器忽略display:none,则它不完全支持HTML。我建议切换到真正的浏览器。

许多旧浏览器中都存在错误,其中“显示:无”以奇怪的方式删除项目。就像2012年以前的Webkit浏览器一样,在提交按钮上“显示:无”,然后按“返回”,将不会向服务器提交表单字段数据。还有一些情况下,添加到“隐藏”类型的输入字段中以在旧IE浏览器中隐藏这些字段的“显示:无”无法将该输入数据发送到服务器

大家的共识应该始终是不要使用“显示:无”隐藏表单字段数据或任何通常不显示但仍需要屏幕阅读器查看、提交表单字段数据或搜索引擎读取的字段。只有当我确实想从页面中临时删除某些内容,但稍后再次启用时,我才使用“display:none”

下面是“display:none”的替代方法,该方法仅对用户直观地隐藏项目,并将其完全从页面流中删除,而不隐藏其内容或数据:

.hide {
    position: absolute !important;
    top: -9999px !important;
    left: -9999px !important;
    visibility: hidden !important;
}

如果您发现您的输入未随
显示一起提交:无
并且您希望您的元素不占用空间还有另一个选项,我在任何地方都没有提到

它似乎有效,但只有在您的元素没有子元素时才有效。

display: contents;

检查浏览器支持,因为这是一项新的CSS功能。

在任何当前浏览器中,这似乎都不是问题。即使显示设置为“无”,也会提交字段。但是,“禁用”的字段将继续不被提交。IE8(惊喜!)仍然存在设置为
display:none。如果该字段的顶部放置了另一个HTML元素,则会出现相同的问题。@Pacerier,是
已禁用
会阻止提交值,但在某些较旧的浏览器上,
display:none
也会产生此效果。请记住,这个答案是4年前发布的,只适用于需要为那些旧浏览器开发的开发人员。现在是1月20日,使用最新版本的Chrome和Firefox,但仍然无法在此处发布之前隐藏在loadChrome 49上的字段,可以确认在display:none中提交输入元素无效。您在哪个浏览器中看到此行为?在我的所有测试中,浏览器似乎都在
display:none
容器中提交表单元素。程序员无法告诉访问者也使用哪种浏览器,我在最新的Firefox中也遇到了同样的问题。正在尝试显示:无或可见性:隐藏但都不起作用。还有谁在这么多网站上放置横幅“该升级浏览器了?”;-)我明白了。你不是说“程序员不能告诉访问者使用什么浏览器”——这会侵犯言论自由。。。你的意思可能是“雇佣程序员”。好啊我的帖子没有太大帮助,因为我只是想指出什么是标准规定的正确行为。就是这样。无论如何,我对可见性:隐藏(甚至可能显示:无)的评论都是胡说八道,因为我意识到,在我的例子中,这是一个错误,或者更确切地说是一个疏忽,写入了HTML标准。如果复选框未选中并且表单已提交,则它就好像根本不存在一样。它不仅不提交任何东西(请原谅双重否定),而且根本不提交。因此,它看起来不像是某种古怪的非HTML兼容浏览器。案件结案。