2010-11-23 17 views
1

javascriptでテキスト入力フィールドを非表示にする必要があります。 IE(セキュリティ上の問題)では、type属性をhiddenに変更することはできません。JavaScriptでHTML入力フィールドを非表示にする方法

これを行うにはどうすればよいでしょうか?

注:jQueryまたは他のlibは想定できません。

答えて

1

フォーム内の条件の変化に基づいてテキストフィールドを動的に表示および非表示にする必要があると仮定します。そうでない場合は、最初に<input type="hidden"...にしてください。

フィールドをそのまま表示および非表示にするコードを維持しますが、onsubmitイベントもキャッチします。

送信ハンドラでは、テキストフィールドをdocument.getElementById(...)(またはdocument.forms[i]にアクセスして)にして、それが隠されているかどうかを確認します。それ非表示になっている場合

<input type="hidden" ...>フィールドのための新たなDOMノードを作成し、おそらくmyform.appendChild(...)を経由して、フォームにそのノードを追加します。サーバー側のコードで期待される名前を付ける必要があります。非表示のテキストフィールドの内容を新しく作成したtype = hiddenフィールドにコピーしてから、送信ハンドラから戻り、標準送信を続行できます。

また、送信時にテキストフィールドを非表示にすることもできますが、 "オフスクリーン"にする必要があります。そうしないと、送信処理中に再び表示されます。

0

これを変更できる唯一の方法は、DOMに追加する前です。新しい要素を作成し、現在の要素をその要素に置き換えることができます。

手動でDOMスクリプトを作成したいので、replaceChildとcreateElementを見てください。私はあなたが何をすべきかを知っていると思います。

EDIT:私が知る限り「隠された」フィールドです。あなたはそれらがあるかどうかチェックしましたか?また、それらを相殺するためにposition:absolute; left:-9999em;を行うこともできます。

+0

Re 'position:absolute' - はい。しかし、それはタブ順にとどまります。それを無効にしてタブ移動を防ぎますが、依然として送信時に送信されますか? –

0

document.myform.myelement.style.display = 'なし' でもInternet Explorerで期待通り

作品。

+0

この値はフォーム提出の一部として提出されません – Nir

0

divまたはspanでラッピングし、非表示にする場合は表示スタイルをnoneに設定してから、必要に応じてブロック(divを使用した場合)またはインライン(spanを使用した場合)を設定します。それを表示する。

+0

フォーム提出で値を送信する必要があります。私の知る限り、隠しアイテムはすべてのブラウザから送信されていません(入力タイプ= '非表示'を除く) – Nir