特定の条件下で無効にする必要があるチェックボックスがあります。HTTP は無効な入力を投稿しないことが判明しました。
どうすればそれを回避できますか?無効になっている場合でも入力を送信し、入力を無効のままにしますか?
特定の条件下で無効にする必要があるチェックボックスがあります。HTTP は無効な入力を投稿しないことが判明しました。
どうすればそれを回避できますか?無効になっている場合でも入力を送信し、入力を無効のままにしますか?
UPDATE :READONLY
チェックボックスでは機能しません
使用できますdisabled="disabled"
が、この時点ではチェックボックスの値は値に表示されませんPOST
。戦略の 1 つは、同じフォーム内にチェックボックスの値を保持する隠しフィールドを追加し、そのフィールドから値を読み取ることです。
単に変更disabled
するreadonly
私はその問題を解決しました。
タグが機能しないため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
If you're happy using JQuery then remove the disabled attribute when submitting the form:
$("form").submit(function() {
$("input").removeAttr("disabled");
});
このように処理できます...チェックボックスごとに、同じname
属性を持つ非表示フィールドを作成します。ただし、その非表示フィールドの値に、テストできるデフォルト値を設定します。例えば..
<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />
フォームが送信されたときにチェックボックスが「チェック」されている場合、そのフォームパラメーターの値は
"agree,false"
チェックボックスがチェックされていない場合、値は
"false"
「false」の代わりに任意の値を使用できますが、アイデアは得られます。
これを行う最も簡単な方法は次のとおりです。
<input type="checkbox" class="special" onclick="event.preventDefault();" checked />
これにより、ユーザーはこのチェックボックスの選択を解除できなくなり、フォームの送信時にその値が送信されます。ユーザーがこのチェックボックスを選択できないようにする場合は、[削除]チェックボックスをオンにします。
また、特定の条件が満たされた場合は、javascriptを使用してonclickをクリアできます(それが目的の場合)。これが私が何を意味するのかを示す汚いフィドルです。完璧ではありませんが、要点はわかります。
<input type="checkbox" checked="checked" onclick="this.checked=true" />
私は問題から始めました:「無効になっている入力チェックボックスを投稿/送信する方法は?」そして私の答えでは、私はコメントをスキップしました:チェックボックスではありません)」。私の答えでは、チェックボックスを常にチェックしたままにしておき、そのコードはこのように機能すると思いました。そのチェックボックスをクリックすると、永久にチェックされ、その値が POSTED/Submitted になります! 同様に、checked="checked" なしで onclick="this.checked=false" と書くと (注: デフォルトではチェックされていません)、永久にチェックされず、その値は POSTED/Submitted! になりません。
これは魅力のように機能します:
唯一の欠点は、送信時に無効な入力フィールドが短時間点滅することです。少なくとも私のシナリオでは、それは大した問題ではありません!
$('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);
});
以来:
別の可能性を提供します。
チェックボックスを通常どおり無効に設定します。ユーザーがフォームを送信する前に、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>
フォームが送信される前にチェックボックスが有効になっているため、その値は一般的な方法で投稿されます。このソリューションの唯一の不満は、このチェックボックスがしばらくの間有効になり、それがユーザーに表示されることです。しかし、それは私が一緒に暮らすことができる細部です。
無効にしないでください。代わりに読み取り専用に設定しますが、ユーザーが状態を変更できないため、これは効果がありません。ただし、jQuery を使用してこれを強制することができます (ユーザーがチェックボックスの状態を変更できないようにします。
$('input[type="checkbox"][readonly="readonly"]').click(function(e){
e.preventDefault();
});
これは、変更したくないすべてのチェックボックスに「読み取り専用」属性があることを前提としています。例えば。
<input type="checkbox" readonly="readonly">
フィールド以外のオプションはないため、以下のコードに示すようにフィールド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
追加onclick="this.checked=true"
私の問題を解決してください:
例:
<input type="checkbox" id="scales" name="feature[]" value="scales" checked="checked" onclick="this.checked=true" />
<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 番目のチェックボックスの無効化を管理する必要はありません