現在、イベントハンドラー(特定のイベントが検出されたときに起動される関数)を定義するための3つの異なるメソッドがあります。従来のメソッド、W3Cメソッド、およびMicrosoftメソッドです。
従来の方法
従来の方法では、イベントハンドラーは、Javascriptで要素のon eventプロパティを設定するか(サンプルコードで行っているように)、またはHTMLタグでon event属性を設定することによって定義されます(など<select onchange="...">
)。これは使用するのが最も簡単な方法ですが、ご存知のように、かなり厳格であるため、現在では一般的に使用されていません。すでにイベントハンドラーがアタッチされている要素にイベントハンドラーを追加および削除するのは簡単ではありません。同様に、JavaScriptをHTMLと混合することはもはや適切な方法とは見なされていませんが、タグ内に含めるか、<script>
タグを介してロードする必要があります。
W3C/Microsoftの方法
W3C(World Wide Web Consortium)とMicrosoftは、どちらも独自のイベントモデルを定義しています。2つのモデルは基本的に同じように機能しますが、構文が異なります。MicrosoftモデルはInternetExplorerで使用され、W3Cモデルは他のブラウザー(Firefox、Opera、Safari、Chromeなど)で使用されます。これらのモデルの両方で、イベントハンドラー(W3Cの場合はaddEventListener、Microsoftの場合はattachEvent)を追加し、イベントハンドラー(removeEventListener / detachEvent)を削除するための関数が提供されています。これにより、特定のハンドラーを要素に動的に追加および削除できます。あなたの場合、最初の条件に基づいて最初のハンドラーを追加し、2番目の条件に基づいて2番目のハンドラーを追加できます。これらの方法の「問題」は、2つあることです。したがって、イベントハンドラーがすべてのブラウザーに登録されるようにするには、両方のメソッドを使用する必要があります(2つのモデルの間にも微妙な違いがいくつかありますが、これらの違いはこの質問の範囲にとって重要ではありません)。実際、見てみると、必要に応じて両方のメソッドを使用する(通常、古いブラウザーの従来のメソッドにフォールバックする)多数の「addEvent」関数が見つかります。たとえば、2005年にQuirksModeブログでコンテストが実行され、最高の「addEvent」関数が作成されました。その結果は(優勝関数とともに)表示されます。必要に応じて両方の方法を使用する関数(通常、古いブラウザーの従来の方法にフォールバックします)。たとえば、2005年にQuirksModeブログでコンテストが実行され、最高の「addEvent」関数が作成されました。その結果は(優勝関数とともに)表示されます。必要に応じて両方の方法を使用する関数(通常、古いブラウザーの従来の方法にフォールバックします)。たとえば、2005年にQuirksModeブログでコンテストが実行され、最高の「addEvent」関数が作成されました。その結果は(優勝関数とともに)表示されます。ここ。
また、PrototypeやjQueryなどのjavascriptライブラリを使用する場合は、上記を処理する組み込みのイベント処理関数が付属しています。