2011-11-29 27 views
56

我有一个很长的形式,我分成了6个步骤。当表单被加载时,所有的步骤都被加载,但只有第一步可见。其余的CSS有display:none,所以它们是隐藏的。在使用Javascript完成并验证步骤后,当前步骤设置为display:none,新步骤设置为display:block。在最后一步,用户提交表单。但是,如预期的那样,仅提交页面上display:block元素的字段。与display:none元素中的所有完成字段都将被忽略。提交表单内部显示:无元素

有没有办法提交display:none元素内的字段?

如果没有,是否有另一种方法来实现相同的效果?

+0

你可能想看看jQuery表单向导插件:http://thecodemine.org/它可能会给你一些想法,甚至履行你的期望。 –

+8

你在什么浏览器中看到过这种行为?在我的所有测试中,浏览器似乎都在'display:none'容器内提交表单元素。 – tremby

回答

120

改为将它们设置为visibility:hiddenposition:absolute。这些字段不会被发送到服务器display:none,但将与visibility:hidden。通过将“位置”切换为“绝对”,您应该获得相同的视觉效果。

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

+0

我可以用jQuery的slideUp()和slideDown()来做到这一点吗? –

+0

我对jQuery不是很熟悉。如何显示:目前没有设置?如果你这样做,你应该能够用设置位置和可视性的代码替换该代码。如果它隐藏在框架中,则必须查看是否有方法来覆盖行为或找到其他解决方法。 – adam0101

+0

不,你不能用SlideDown做到这一点,因为在动画结束时html项目的'display'将被设置为'none' – siniradam

0

只是为上面的答案添加了一些内容。如果你想使用slideDown() - 之前它设置元素的这样的CSS:

$('element') 
    .css({ 
     display: 'none' 
     position: 'relative', 
     visibility: 'visible' 
    }) 
    .slideDown(); 

而且slideDown()会工作得很好。您可以使用slideUp()的相同逻辑。