ダーティ ステート トラッキングを使用します。すべての入力コントロールにブール値 (IsDirty など) をアタッチし、値が変化するたびに切り替えます。フォームの送信中に、少なくとも 1 つ以上の値が変更されているかどうかを確認してから、フォームを送信してください。それ以外の場合は、ユーザーにアラートを表示します。
もう 1 つの解決策は、コントロールの値が変更されるたびに共通の関数を呼び出すことです。この関数では、何かが変更された場合にグローバル変数 (IsDirty) を true に設定し、送信ボタンを有効/無効にすることもできます。
var isDirty = false;
function SomethingChanged(){
if( !isDirty ) isDirty = true;
btnSubmit.disabled = !isDirty;
}
任意のコントロールのジェネリック関数
前提: 各コントロールの初期値を属性「InitVal」に追加します。
function SomethingChanged(control){
if( control.value != control.InitVal )
control.IsDirty = true;
else
control.IsDirty = false;
}
汎用にする上記の関数では、TextBoxChanged や DropDownChanged などのコントロールの種類ごとに個別の関数を使用できます。ただし、各コントロールには次の 2 つの属性があります。
- InitValue - コントロールの初期値
- IsDirty - コントロールの値が変更されたことを示すブール値