フォームが送信され、ページが(元のコンテンツで)更新されているのです。click送信ボタンでイベントを処理しています。
要素を削除してフォームを送信しないsubmit場合は、代わりにフォームでイベントを処理falseし、ハンドラーから戻ります。
HTML:
<form onsubmit="return removeDummy(); ">
<input type="submit" value="Remove DUMMY"/>
</form>
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
ただし、そのためのフォームは必要ありません(または必要ありません)。その唯一の目的がダミーのdivを削除することである場合は除きます。代わりに:
HTML:
<input type="button" value="Remove DUMMY" onclick="removeDummy()" />
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
ただし、そのイベントハンドラーの設定スタイルは古風です。JavaScriptコードが独自のファイルなどにあるという点で、本能は優れているようです。次のステップは、それをさらに進め、onXYZイベントハンドラーのフックに属性を使用しないようにすることです。代わりに、JavaScriptで、新しい(2000年頃)方法でそれらをフックできます。
HTML:
<input id='btnRemoveDummy' type="button" value="Remove DUMMY"/>
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
function pageInit() {
// Hook up the "remove dummy" button
var btn = document.getElementById('btnRemoveDummy');
if (btn.addEventListener) {
// DOM2 standard
btn.addEventListener('click', removeDummy, false);
}
else if (btn.attachEvent) {
// IE (IE9 finally supports the above, though)
btn.attachEvent('onclick', removeDummy);
}
else {
// Really old or non-standard browser, try DOM0
btn.onclick = removeDummy;
}
}
...次に、ページの最後(終了タグの直前)のタグから、またはイベント内pageInit();から呼び出しますが、これはページのロードサイクルの非常に遅いscript段階で発生するため、通常、イベントのフックには適していません。ハンドラー(たとえば、すべての画像が最終的にロードされた後で発生します)。body</body>window load
ブラウザの違いに対処するために、いくつかの処理を行わなければならなかったことに注意してください。イベントをフックする関数が必要になるので、毎回そのロジックを繰り返す必要はありません。などのライブラリを使用することを検討してjQueryの、プロトタイプ、YUI、閉鎖、または他のいくつかのいずれかのあなたのために、これらのブラウザの違いを超える滑らかにします。それはです非常に重要な基盤となるものは、JavaScriptの基礎とDOMの基礎の両方の観点から、起こって理解することが、図書館は矛盾の多くに対処し、また便利なユーティリティの多くを提供-イベントハンドラことをフックする手段のようながら予約ブラウザの違い。それらのほとんどは、関数(pageInit)DOMが操作可能になるとすぐに、起動する前に実行しwindow loadます。