display:noneによって非表示になっている入力フィールドをサーバーに送信しないようにするにはどうすればよいですか?


88

複数のフィールドの表示を切り替えるフォームがあるとします。また、フィールドが表示されていない場合は、その値を要求に含める必要はありません。

この状況にどのように対処しますか?

回答:


128

フォーム要素を無効に設定すると、サーバーへの送信が停止します。例:

<input disabled="disabled" type="text" name="test"/>

javascriptでは、次のような意味になります。

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

jQueryの場合:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();

16
:input代わりにjQueryの疑似セレクターをinput使用するselectと、すべてのtextarea要素を簡単に無効にすることもできます
Daniel Rikowski 2012

8
jQuery> = 1.6では、代わりにapi.jquery.com/propattr("disabled", true)を使用する必要がありますprop("disabled", true)
yorch

2
@ dominicbri7-jQuery 1.6以降、無効プロパティとチェックプロパティの両方をAND設定.prop()するに.attr()は、代わりにを使用することをお勧めします。を使用してチェックまたは設定する.attr()と、望ましくない結果が返される場合があります。yorchが何を参照していたかについてコメントする前に、jQueryのドキュメントをお読みください。
zgr024 2013

@ zgr024罰金、私のコメントを削除
dominicbri7 2013

2
@DanielRikowski、このjQueryとは何ですかjQueryはナンセンスです。バニラJSについて話しましょう。
ペースリエ2015年

13

javascriptを使用してdisabled属性を設定できます。「送信」ボタンのクリックイベントは、おそらくこれを行うのに最適な場所です。

ただし、これはまったく行わないことをお勧めします。可能であれば、サーバーでクエリをフィルタリングする必要があります。これはより信頼性が高くなります。


7

非表示の親要素内のすべての要素または特定の要素を無効にする場合は、

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

この例http://jsfiddle.net/gKsTS/は、非表示のdiv内のすべてのテキストボックスを無効にします


これは、非表示のdivを反復処理してすべてを無効にするため、非常に優れたソリューションです。+1が増えるはずです
yeppe 2016年

6

どうですか:

$('#divID').children(":input").prop("disabled", true); // disable

そして

$('#divID').children(":input").prop("disabled", false); // enable

非表示のdiv内のすべての子入力(選択、チェックボックス、入力、textareasなど)を切り替えるには。


これは、すべての入力を取得する場合に最適なソリューションです。良い仕事
doz87 2016

3

非常に単純な(ただし常に最も便利なとは限らない)解決策の1つは、「name」属性を削除することです。標準では、ブラウザーが名前のない値を送信しないことを要求しており、私が知っているすべてのブラウザーはこの規則に従います。


4
javascriptを使用して状態を変更する場合、すべての名前属性をキャッシュせずに入力をリセットすることはほとんどできないため、お勧めしません。無効状態を切り替える方がはるかに簡単です。
サイモン

1

入力から値を削除するか、入力オブジェクトをDOMから切り離して、最初に投稿されるように存在しないようにします。

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