web-dev-qa-db-ja.com

無効な<input>要素からフォーム値を取得するにはどうすればよいですか

フォームのHTML標準は、無効化された入力要素がフォームの名前/値のコレクションに寄与しないように見えます。

これを回避する方法はありますか?無効化のオンとオフを切り替えることができる必要がありますが、それでもフォームが送信されたときに値が何であっても返します。

フォームを送信する前にJavaScriptを使用して値を非表示の入力にコピーできることを認識していますが、そうしないことを望みます。よりクリーンな方法はありますか?

私はASP.NETを使用していますが、それは重要ではありません。

35
lfonlfonlfon

readOnlyではなく、disabledフラグを使用する必要があります。読み取り専用フィールドはユーザーが編集することはできませんが、フォームとともに送信されます。

<input type="text" value="blah" readonly="true"/>
84
levik

フォームのHTML標準は、無効化された入力要素がフォームの名前/値のコレクションに寄与しないように見えます。

それは正しいです。

ハック:送信時にJavascriptを使用できます。

  1. 設定解除
  2. 読み取り専用に設定
  3. 参加する!
20
Wayne

値をreadonlyにすると、無効にする代わりに、フィールドの名前/値が、無効になっていない残りのフィールドとともに送信されます。

読み取り専用フィールドのフォーカスイベントハンドラーがフォーカスを次の適格なフィールドに渡し、無効化された要素のように機能するようにします。一部のブラウザでは、読み取り専用フィールドにフォーカスして選択できるほか、読み取り専用フィールドに貼り付けることもできますが、元の値onblurおよびonchangeに戻ります。

<input type="text" value="" readonly="readonly">
9
kennebec

コントロールを無効にする場合、Wayneのハック(Backボタンのプッシュで混乱する可能性があります)のわずかに堅牢なバリアントとして:set readonly= trueおよびclassName= 'disabled' の代わりに disabled= true、次にスタイル.disabled無効なフィールドに似ています。

8
bobince

入力が無効になっている間、データフィールドに値を保存するクイック(Jqueryのみ)プラグインを作成しました。これは、フィールドが.prop()または.attr()...を使用してjqueryを介してプログラムで無効にされている限り、.val()、. serialize()または.serializeArra()によって値にアクセスすると、常に無効にしても値:)

https://github.com/Jezternz/jq-disabled-inputs

2
Josh Mc

そのシンプルな2つのステップ

  1. アクセスしたい入力が「無効」属性を削除する場合、無効になっているかどうかを確認します

  2. 値を取得してから、無効化された属性を再度追加します。

0
Mateen