原因:
プログラムの変更モジュールを実装するとき、ユーザーがページ側でデータを変更したかどうかを確認し、変更したデータを時間内に保存するようユーザーに通知する必要があります。
実装要件:
ユーザーが入力内容を変更したかどうかを判断します。入力内のチェックボックス、テキスト、ラジオなどを判断できる必要があります。になりますが、入力の ID と名前がわかりません。変更するかどうかを判断するには、クライアント側で送信を生成できません。また、IE と Firefox の両方の環境を満たす必要があります。マスター ページとコンテンツ ページの使用をサポートすることも必要です。
解決策;
処理のアイデア: ページがロードされたときにすべての入力の値またはステータスを記録します。ユーザーが変更操作を行ったときにすぐにコントロールのステータスを調整する必要がある場合は、onclick をクリックして、 data area div onkeypress イベントで、データが変更されたかどうかを確認する関数を呼び出し、対応するコントロールの状態を設定します (ha_setch() を使用)。送信された場合、またはユーザーがチェック プロセスを手動で制御した場合、チェック データは対応する操作イベントで呼び出されます (たとえば、ボタンの onclick() で ha_checkin() を使用して送信を制御します)。
以下は実装コードです。
var ha_last=new Array;//すべての初期値を格納するグローバル空オブジェクトを定義します。
function ha_get()//初期値を読み込みます
{ var ha_input = document.getElementsByTagName("input");
for (var i=0;i
if (ha_input[i].type=="password"){ ha_last.push(ha_input[i].value);}//基本ページでは type 属性と object 属性の値を設定する必要があります
if (ha_input [i].type=="radio") {ha_last.push(ha_input[i].checked);}//チェック範囲が正確であることを確認するため
}
}
window .onload=ha_get ;//初期値を読み取る関数をバインドします
function ha_checkin()//新しい入力値が初期値と等しいかどうかを確認します。判定結果を返します。 true は変更が行われていないことを意味し、false は変更があったことを意味します。
{ var ha_now=new Array;
var ha_input = document.getElementsByTagName("input");
for (var i=0;i
if (ha_input[i].type=="password"){ ha_now.push(ha_input[i].value);}//基本ページでは、type 属性と object 属性の値を設定する必要があります。
if (ha_input[i].type=="radio") {ha_now.push(ha_input[i].checked);}//ha_get() でチェックされたタグと一致していることも確認します
}
if (ha_now.toString()==ha_last.toString())//変更なし
{return true;}
else//変更
{return false;}
}
function ha_setch(){//対応するコントロールのステータスを設定します
if (ha_checkin())//変更なし
//コントロールの表示と機能ステータスを変更します
else//ありますa change
//コントロールの表示と機能ステータスを変更します
}
注: 上記のソリューションは、IE6 と Firefox3.0.2 でのみテストされ、合格しました。他のブラウザではテストされていません。