私は6つのステップに分かれた長いフォームを持っています。フォームがロードされると、すべてのステップがロードされますが、最初のステップのみが表示されます。残りのCSSはdisplay:none
であるため、非表示になっています。ステップが完了し、JavaScriptで検証されると、現在のステップはdisplay:none
に設定され、新しいステップはdisplay:block
に設定されます。最後のステップで、ユーザーはフォームを送信します。ただし、予想どおり、ページのdisplay:block
要素のフィールドのみが送信されます。 display:none
を持つ要素のすべての完成したフィールドは無視されます。
display:none
要素内のフィールドを送信する方法はありますか?
そうでない場合、同じ効果を達成する別の方法はありますか?
代わりにvisibility:hidden
およびposition:absolute
に設定してください。フィールドはdisplay:none
でサーバーに送信されませんが、visibility:hidden
で送信されます。 「位置」を「絶対」に切り替えることで、同じ視覚効果を得ることができます。
更新これは、現在のブラウザーではもう問題ではないようです(2015年11月現在)。表示が「なし」に設定されている場合でも、フィールドは送信されます。ただし、「無効」になっているフィールドは送信されません。
上記の答えに何かを追加するだけです。 slideDown()
を使用する場合は、次のように要素のcssを設定する直前に:
_$('element')
.css({
display: 'none'
position: 'relative',
visibility: 'visible'
})
.slideDown();
_
slideDown()
は問題なく動作します。 slideUp()
にも同じロジックを使用できます。
HTML4のセクション17.13.2では、display:noneを使用した非表示のコントロールでさえ、提出に有効である可能性があると明示的に述べられています。
https://www.w3.org/TR/html401/interact/forms.html
したがって、ブラウザがdisplay:noneを無視すると、完全にHTML対応ではなくなります。実際のブラウザに切り替えることをお勧めします。