チェックボックスを介して送信が有効になっている複数のフォーム
-
10-07-2019 - |
質問
最初に、ハウスキーピング:簡単に確認すると、これは重複ではないが、修正してもよろしいと思います。
複数のフォームを含むページを持つASP.NET MVCアプリがあります。各フォームにはテキストフィールド、同意チェックボックス、送信ボタンがあります。フォームごとに契約チェックボックスが個別にチェックされていない場合、送信ボタンを無効にしたいと思います。私はそれを機能させましたが、エレガントなものが欠けているという感覚があり、JQueryには私よりもはるかに優れた人々がいることを知っています。
これは私が取り組んでいるコードです:
$(function() {
$("form").each(function() {
$("#Agreement", this).click(function() {
if (this.checked) {
$($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "");
} else {
$($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "disabled");
}
});
});
});
コードはページ準備完了で実行され、ページ上のすべての「フォーム」を選択し、各フォーム内の各契約チェックボックスにクリックハンドラーをアタッチすることがわかります。私が苦労したのは、特にエレガントではないように見えますが、クリックイベントをトリガーしたチェックボックスオブジェクトから親フォームオブジェクトに戻り、次に(チェックボックスの)兄弟送信ボタンに戻って無効にする方法です。誰かがより良い解決策を思いつくことができれば、私は教育を受ける準備ができています!
解決
このようなもののほうが良いかもしれません:
$(function() {
$("form").each(function() {
$("#Agreement", this).click(function() {
$('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
});
});
});
各フォーム内で id =" Agreement"
を再利用しているように見えます。これを行うべきではありません。
idをclassに変更する場合でも、これを実行できます。
$(function() {
$("form .Agreement").click(function() {
$('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
});
});
他のヒント
関数disableSubmit(objId、checkState)を使用してアプローチし、実際には各チェックボックスに属性onclick =" disableSubmite( 'submit1'、this.checked);
をコーディングします。disableSubmit(objId, checkState)
{
$(#objId).attr("disabled", checkState ? "" : "disabled");
}
Jqueryはクールですが、場合によっては、JSを起動するオブジェクトに直接アタッチする必要があります。