2011-11-29 26 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()的相同邏輯。