無効な入力の値は送信されません


224

これは、FirebugがFirefoxで見つけたものです。

他のブラウザでも同じですか?

もしそうなら、これの理由は何ですか?


23
'readonly'属性を設定できます。たとえば、Chromeは無効なフィールドとしてレンダリングしますが、送信します。
peterrus 2013年

回答:


189

はい、無効になっている入力は読み取り専用であるため、すべてのブラウザで送信しないでください。

詳細(セクション17.12.1)

属性の定義

disabled [CI]フォームコントロールに設定すると、このブール属性はユーザー入力のコントロールを無効にします。設定すると、disabled属性は要素に次の影響を与えます。

  • 無効にされたコントロールはフォーカスを受け取りません。
  • 無効化されたコントロールは、タブナビゲーションではスキップされます。
  • 無効にされたコントロールは成功できません。

次の要素は、disabled属性をサポートします:BUTTON、INPUT、OPTGROUP、OPTION、SELECT、およびTEXTAREA。

この属性は継承されますが、ローカル宣言は継承された値をオーバーライドします。

無効化された要素のレンダリング方法は、ユーザーエージェントによって異なります。たとえば、一部のユーザーエージェントは、無効になったメニュー項目、ボタンラベルなどを「グレー表示」します。

この例では、INPUT要素が無効になっています。したがって、ユーザー入力を受け取ることはできず、その値はフォームと共に送信されません。

<INPUT disabled name="fred" value="stone">

注意。disabled属性の値を動的に変更する唯一の方法は、スクリプトを使用することです。


86
回避策:<input type="hidden">無効な入力と同じ名前/値を持つ要素を追加します。
ジョンクーゲルマン

どのブラウザでどのブラウザが従わないかに関する情報はありますか?
Allisone 2013年

82
代わりにreadonly = "readonly"を使用してください:)stackoverflow.com/questions/7357256/…を
Adrien Be

1
@Allisone:FirefoxとChromeはこれに従っているようです(無効な入力は送信されません)。他のブラウザでは試しませんでした。
Adrien Be

1
@JohnKugelmanなぜ同じ名前なの?とにかく無効にされた人は提出されません。隠された人に本当の名前を付け、無効な人に別の名前を使用することもできます
Arth

286

disabled 入力はデータを送信しません。

次のreadonly属性を使用します。

<input type="text" readonly />

ソースはこちら


@FrankFang、わかりました。でも、Laravel Collectiveのブレードテンプレートにデータを渡すときは。動作しません。そのようにデータを送信することはできません。
ssi-anik 2016

@ ssi-anikはreadonly機能します。「name」属性を入力に渡してください。
BenNov

26

無効にしたものを模倣するには、次の3つの方法があります。

  1. HTML:readonly属性(入力に存在する値をフォーム送信で使用できるようにします。また、ユーザーは入力値を変更できません)

  2. CSS:( 'pointer-events':'none'ユーザーが入力をクリックできないようにする)

  3. HTML:(tabindex="-1"キーボードから入力に移動するためのユーザーのブロック)


22

W3C仕様ではそのように記載されているため提出されません。

17.13.2成功した制御

成功したコントロールは、送信に対して「有効」です。[をちょきちょきと切る]

  • 無効になっているコントロールは成功できません。

つまり、無効化されたコントロールは無効であると見なされ、送信されるべきではないという仕様です。


2

Disabledコントロールは成功することができず、成功したコントロールは送信に対して「有効」です。これが、無効にされたコントロールがフォームと共に送信されない理由です。


1

2すなわち、属性、ありreadonlydisabled半読み取り専用の入力を行うことができ、。しかし、それらの間には小さな違いがあります。

<input type="text" readonly />
<input type="text" disabled />
  • このreadonly属性により入力テキストが無効になり、ユーザーはそれを変更できなくなります。
  • このdisabled属性は入力テキストを無効(変更不可)にするだけでなく、送信することできません

jQueryアプローチ(1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

jQueryアプローチ(2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

JavaScriptアプローチ:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledおよびreadonlyは、標準のHTML属性です。propで紹介されましたjQuery 1.6


0

読み取り専用属性でも選択コントロールはクリック可能です

コントロールを無効にしたいが、その値をポストしたい場合。非表示フィールドを作成することを検討してください。コントロールと同じ値。

次に、選択した変更時にjqueryを作成します

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.