138

特定の条件下で無効にする必要があるチェックボックスがあります。HTTP は無効な入力を投稿しないことが判明しました。

どうすればそれを回避できますか?無効になっている場合でも入力を送信し、入力を無効のままにしますか?

4

18 に答える 18

112

UPDATE :READONLYチェックボックスでは機能しません

使用できますdisabled="disabled"が、この時点ではチェックボックスの値は値に表示されませんPOST。戦略の 1 つは、同じフォーム内にチェックボックスの値を保持する隠しフィールドを追加し、そのフィールドから値を読み取ることです。

単に変更disabledするreadonly

于 2011-01-18T19:11:17.220 に答える
98

私はその問題を解決しました。

タグが機能しないためreadonly="readonly"(さまざまなブラウザーを試しました)、disabled="disabled" 代わりに使用する必要があります。しかし、チェックボックスの値は投稿されません...

これが私の解決策です:

「読み取り専用」の外観とPOSTチェックボックスの値を同時に取得するには、チェックボックスと同じ名前と値を持つ非表示の「入力」を追加するだけです。チェックボックスの横または同じ<form></form>タグの間に保持する必要があります。

<input type="checkbox" checked="checked" disabled="disabled" name="Tests" value="4">SOME TEXT</input>

<input type="hidden" id="Tests" name="Tests" value="4" />

また、あなたに知らせるreadonly="readonly", readonly="true", readonly="",か、これを解決しないだけREADONLYです! 私はそれを理解するために数時間を費やしました!

この参照も関係ありません (まだ、またはもう関係ないかもしれませんが、わかりません): http://www.w3schools.com/tags/att_input_readonly.asp

于 2011-11-25T22:30:25.190 に答える
77

If you're happy using JQuery then remove the disabled attribute when submitting the form:

$("form").submit(function() {
    $("input").removeAttr("disabled");
});
于 2012-11-19T16:58:05.643 に答える
10

このように処理できます...チェックボックスごとに、同じname属性を持つ非表示フィールドを作成します。ただし、その非表示フィールドの値に、テストできるデフォルト値を設定します。例えば..

<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />

フォームが送信されたときにチェックボックスが「チェック」されている場合、そのフォームパラメーターの値は

"agree,false"

チェックボックスがチェックされていない場合、値は

"false"

「false」の代わりに任意の値を使用できますが、アイデアは得られます。

于 2011-01-18T19:14:03.107 に答える
9

これを行う最も簡単な方法は次のとおりです。

<input type="checkbox" class="special" onclick="event.preventDefault();" checked />

これにより、ユーザーはこのチェックボックスの選択を解除できなくなり、フォームの送信時にその値が送信されます。ユーザーがこのチェックボックスを選択できないようにする場合は、[削除]チェックボックスをオンにします。

また、特定の条件が満たされた場合は、javascriptを使用してonclickをクリアできます(それが目的の場合)。これが私が何を意味するのかを示す汚いフィドルです。完璧ではありませんが、要点はわかります。

http://jsfiddle.net/vwUUc/

于 2013-02-19T18:01:39.710 に答える
8
<input type="checkbox" checked="checked" onclick="this.checked=true" />

私は問題から始めました:「無効になっている入力チェックボックスを投稿/送信する方法は?」そして私の答えでは、私はコメントをスキップしました:チェックボックスではありません)」。私の答えでは、チェックボックスを常にチェックしたままにしておき、そのコードはこのように機能すると思いました。そのチェックボックスをクリックすると、永久にチェックされ、その値が POSTED/Submitted になります! 同様に、checked="checked" なしで onclick="this.checked=false" と書くと (注: デフォルトではチェックされていません)、永久にチェックされず、その値は POSTED/Submitted! になりません。

于 2012-10-10T12:02:12.690 に答える
4

これは魅力のように機能します:

  1. 「無効」属性を削除します
  2. フォームを送信する
  3. 属性を再度追加します。これを行う最善の方法は、setTimeOut関数を使用することです。たとえば、1 ミリ秒の遅延があります。

唯一の欠点は、送信時に無効な入力フィールドが短時間点滅することです。少なくとも私のシナリオでは、それは大した問題ではありません!

$('form').bind('submit', function () {
  var $inputs = $(this).find(':input'),
      disabledInputs = [],
      $curInput;

  // remove attributes
  for (var i = 0; i < $inputs.length; i++) {
    $curInput = $($inputs[i]);

    if ($curInput.attr('disabled') !== undefined) {
      $curInput.removeAttr('disabled');
      disabledInputs.push(true);
    } else 
      disabledInputs.push(false);
  }

  // add attributes
  setTimeout(function() {
    for (var i = 0; i < $inputs.length; i++) {

      if (disabledInputs[i] === true)
        $($inputs[i]).attr('disabled', true);

    }
  }, 1);

});
于 2015-10-17T08:42:43.533 に答える
3

以来:

  • HTML の仕様上、readonly 属性をチェックボックスに設定することは無効です。
  • 非表示の要素を使用して値を送信するのはあまりきれいな方法ではなく、
  • 値の変更を防ぐonclick JavaScriptを設定するのもあまり良くありません

別の可能性を提供します。

チェックボックスを通常どおり無効に設定します。ユーザーがフォームを送信する前に、JavaScript でこのチェックボックスを有効にします。

<script>
    function beforeSumbit() {
        var checkbox = document.getElementById('disabledCheckbox');
        checkbox.disabled = false;
    }
</script>
...
<form action="myAction.do" method="post" onSubmit="javascript: beforeSubmit();">
    <checkbox name="checkboxName" value="checkboxValue" disabled="disabled" id="disabledCheckbox" />
    <input type="submit />
</form>

フォームが送信される前にチェックボックスが有効になっているため、その値は一般的な方法で投稿されます。このソリューションの唯一の不満は、このチェックボックスがしばらくの間有効になり、それがユーザーに表示されることです。しかし、それは私が一緒に暮らすことができる細部です。

于 2013-06-08T14:30:44.897 に答える
3

無効にしないでください。代わりに読み取り専用に設定しますが、ユーザーが状態を変更できないため、これは効果がありません。ただし、jQuery を使用してこれを強制することができます (ユーザーがチェックボックスの状態を変更できないようにします。

$('input[type="checkbox"][readonly="readonly"]').click(function(e){
    e.preventDefault();
});

これは、変更したくないすべてのチェックボックスに「読み取り専用」属性があることを前提としています。例えば。

<input type="checkbox" readonly="readonly">
于 2013-02-07T14:30:18.917 に答える
1

フィールド以外のオプションはないため、以下のコードに示すようにフィールドhiddenを使用してみてください。hidden

<input type="hidden" type="text" name="chk1[]" id="tasks" value="xyz" >
<input class="display_checkbox" type="checkbox" name="chk1[]" id="tasks" value="xyz" checked="check"  disabled="disabled" >Tasks
于 2016-01-04T10:20:59.380 に答える
0

追加onclick="this.checked=true"私の問題を解決してください:
例:

<input type="checkbox" id="scales" name="feature[]" value="scales" checked="checked" onclick="this.checked=true" />
于 2018-08-28T14:31:54.333 に答える
0
<html>
    <head>
    <script type="text/javascript">
    function some_name() {if (document.getElementById('first').checked)      document.getElementById('second').checked=false; else document.getElementById('second').checked=true;} 
    </script>
    </head>
    <body onload="some_name();">
    <form>
    <input type="checkbox" id="first" value="first" onclick="some_name();"/>first<br/>
    <input type="checkbox" id="second" value="second" onclick="some_name();" />second
    </form>
    </body>
</html>

関数 some_name は、句に従ってチェックされている (値をポストする) またはチェックされていない (値をポストしない) 2 番目のチェックボックスを管理する前の句の例であり、ユーザーはそのステータスを変更できません。2 番目のチェックボックスの無効化を管理する必要はありません

于 2012-10-11T11:01:56.273 に答える