フォームが変更された事を知る
昔なら全てのフォーム部品にonchangeを書いていましたけど、attachEventが使える今、ちょいと書き直してみました。
var types = [ "text", "password", "radio", "checkbox", "textarea", "select-one", "select-multiple", "button", "submit", "reset", "" ]; function attachOnChange() { for (var i = 0; i < document.forms.length; i++) { var elements = document.forms[i].elements; for (var j = 0; j < elements.length; j++) { var e = elements[j]; if (types.join().indexOf(e.type + ",") != -1) { e.attachEvent("onchange", elementOnChange); } } } } var changedForm= false; function elementOnChange() { changedForm= true; } function isChangedForm() { return changedForm; } window.attachEvent("onload", attachOnChange);
このJavaScriptをincludeした画面は、isChangedForm()を呼び出す事により、フォーム部品がひとつでも変更されているか取得する事ができます。このスクリプトを使う場面は画面で1箇所でも入力・変更されていた時に、画面遷移しようとしたら「データが変更されています。保存しますか?」みたいに表示する時だと思います。
ちょっと改良すれば、特定の入力部品だけとか、フォームだけってのはできますね。attachEventを知ってからいろいろ楽になりました(^-^)クロスブラウザを考えるなら、addEventListenerとattachEventを使い分ける処理が必要そうです。