これは使える
念のため、onchangeイベントの処理を別途定義してみたけど、それでも問題ない。
あくまで、attachEventもaddEventListenerでもイベント処理を追加した感じ。
<html> <head> <script type="text/javascript"> var changeFlg = false; function onchangeinit() { changeFlg = false; var elems = document.forms[0].elements; for(var i = 0; i < elems.length; i ++) { var e = elems[i]; if(e.attachEvent) { e.attachEvent("onchange", function() { alert('onchangeinit\nattachEvent\n変更しちゃってるよ'); changeFlg = true }); } else if(e.addEventListener) { e.addEventListener("change", function () { alert('onchangeinit\naddEventListener\n変更しちゃってるよ'); changeFlg = true }, false); } } } function isChanged() { return changeFlg ? confirm('変更無視?') : true; } function changeValue(txt) { confirm('changeValue\n変更しちゃってるよ(' + txt +')'); return false; } </script> </head> <body onload="onchangeinit()"> <form> <input type="text" value="aa" onchange="return changeValue('text');" /> <input type="checkbox" onchange="return changeValue('checkbox');" /> <input type="radio" name="a" checked="checked" value="radio1" onchange="return changeValue('radio1');"/> <input type="radio" name="a" value="radio2" onchange="return changeValue('radio2');"/> <input type="radio" name="a" value="radio3" onchange="return changeValue('radio3');"/> <input type="radio" name="a" value="radio4" onchange="return changeValue('radio4');"/> <textarea onchange="return changeValue('textarea');"></textarea> <select onchange="return changeValue('select');"> <option>1</option> <option>2</option> </select> <a href="http://www.google.com" onclick="return isChanged()" target="_blank">変更されたらいけないぶり</a> </form> <input type="button" onclick="changeFlg=false" value="リセット"/> </body> </html>