それぞれ約 100 個の入力フィールド (テキストボックス、テキストエリア、ラジオ、チェックボックス、ファイルなど) を持つフォームがあります。
ユーザーがページを離れたときに、自動保存ルーチンを実行するために、一部のフィールドが変更されているかどうかを知る必要があります。
1.-form_has_been_modified
フィールドが変更されたときに設定します。
var form_has_been_modified = 0;
$("form[id^='my_form']").each(function(){
$(":input", this).live("change", function() {
form_has_been_modified = 1;
});
});
2.- 一部のフィールドが変更された場合にユーザーに警告する:
window.onbeforeunload = function (e) {
if ( ! form_has_been_modified){
return;
}
var message = "This page is asking you to confirm that you want to leave - data you have entered may not be saved.";
var e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = message;
}
// For Safari
return message;
};
質問:
a.- このコード (パート 1) により、ブラウザーのユーザーの速度が大幅に低下する可能性はありますか?
b.- 前のコードは非常にうまく機能しています。ただし、textbox/textarea
入力タイプではchange
、要素がフォーカスを失ったときにのみイベントが発生します。したがって、たとえば、このコードはreload page
アクションから保護しません。change
この欠点を解決する代わりに、別のより良いハンドラーが存在しますか?