検索
ホームページウェブフロントエンドjsチュートリアルJS のいくつかのタイプのイベント ハンドラーの詳細な紹介

イベントとは、ユーザーまたはブラウザ自体によって実行される特定のアクションです。クリック、ロード、マウスオーバーなどはイベントの名前です。

イベント フローは、ページからイベントを受信する順序を記述します。

イベントハンドラーは、イベントに応答する関数です。イベント ハンドラーの名前は「on」で始まります。たとえば、クリック イベントに対応するイベント ハンドラーの名前は onclick です。

イベントのハンドラーを指定するには、HTML イベント ハンドラー、DMO レベル 0 イベント ハンドラー、DOM レベル 2 イベント ハンドラー、IE イベント ハンドラー、クロスブラウザー イベント ハンドラーなど、さまざまな方法があります。

(1) htmlイベントハンドラ

つまり、対応するhtmlタグ内にイベントハンドラを記述します。

例:

<input type="button" value="click me" onclick="alert("hello")" />

欠点: ① HTML 要素がページに表示されるとすぐにユーザーが対応するイベントをトリガーすると、イベント ハンドラーにはまだ実行条件 (たとえば、呼び出されたイベント) が設定されていない可能性があります。関数はまだ利用できません) が解析されている場合)、エラーが発生します。例:

<input type="button" value="click me" onclick="message()" />
<script type="text/javascript">function message(){alert("hello world");}</script>

呼び出される関数がボタンの下にあるため、メッセージ関数が読み込まれる前にボタンをクリックするとエラーが発生します。

②htmlコードとjsコードの結合度が高すぎる場合、イベントハンドラーを変更したい場合は、htmlコードとjavascriptコードの2か所を変更する必要があります。

(2) DMOレベル0イベントハンドラ

eg:
var btn=document.getElementById("myBtn");
  btn.onclick=function(){alert(this.id)};

注: このコードがボタンの後ろにある場合、このコードの前にイベントハンドラが指定されていないため、しばらくクリックしても応答がない可能性があります。実行されます。

DMO レベル 0 イベント ハンドラーは要素のメソッドとみなされます。つまり、DMO レベル 0 イベント ハンドラーは要素のスコープ内で実行されるため、プログラム内の this は現在の要素を参照します。イベント ハンドラーでこれを介して、要素のプロパティとメソッドにアクセスできます。

この方法で追加されたイベント ハンドラーは、イベント フローのバブリング フェーズ中に処理されます。

イベント ハンドラーの属性を null に設定するだけで、指定したイベント ハンドラーを削除することもできます。

eg:
btn.onclick=null;将处理程序设置为null以后,再点击按钮不会发生任何动作。

(3) DOM2 レベルのイベント ハンドラー

DOM2 レベルのイベントでは、イベント ハンドラーを指定および削除するための 2 つのメソッドが定義されています。これら 2 つの操作は、addEventListener() と RemoveEventListner() です。すべての DOM ノードには、これら 2 つのメソッドが含まれています。処理するイベント名、処理関数、およびブール値の 3 つのパラメーターを受け入れる必要があります。最後のブール値パラメータが true の場合、ハンドラーがキャプチャ フェーズで呼び出されることを意味します。 false の場合、イベント ハンドラーがバブリング フェーズで呼び出されることを意味します。

たとえば、ボタンをクリックするためのイベント ハンドラーを追加するには、次のコードを使用できます:

var btn=document.getElementById("myBtn");
btn.addEventListner("onclick",function(){alert("hello world");false});这里添加的事件处理程序也是依附于元素的的作用域

DOM2 イベント ハンドラーを使用する利点は、同じ要素に複数のイベント ハンドラーを追加できることです。

例:var btn=getElementById("myBtn");
btn.addEventListner("click",function(){alert(this.id);},flase);
btn.addEventListner("click",function(){alert("hello world");},flase);

結果: 最初に ID が表示され、次に hello world が表示されます。

addEventListner() を通じて追加されたイベント ハンドラーは、removeEventListner を通じてのみ削除できます。削除に使用されるパラメータは、イベント ハンドラの追加に使用されるパラメータと同じです。もう 1 つの注意: addEventListner を通じて追加された匿名関数は削除できません。

(4) IE イベントハンドラー。イベント ハンドラーを追加および削除するための

IE の関数は、attachEvent() と detachEvent() です。これら 2 つの関数は、同じ 2 つのパラメーター、イベント ハンドラー名とイベント処理関数を受け取ります。 IE はイベント バブリングのみをサポートしているため、attachEvent を通じて追加されたイベント ハンドラーはバブリング フェーズに追加されます。

例如:var btn=document.getElementById("myBtn");
btn.attachEvent("onclick",function(){alert("hello world");});

IE AttachEvent メソッドを使用する場合、イベント ハンドラーのスコープはグローバル スコープであるため、これは window と等しくなります。 (これは、クロスブラウザー コードを作成するときに覚えておくことが非常に重要です)。

addEventListner と同様に、attachEvent() メソッドを使用して要素に複数のイベント ハンドラーを追加することもできます。

eg:
var btn=document.getElementById("myBtn");
btn.attachEvent("onclick",function(){alert("clicked");});
btn.attachEvent("onclick",function(){alert("hello world");});

これらのイベントのハンドラーは逆の順序でトリガーされる、つまり hello が最初に表示されることに注意してください。 「ワールドクリック」が再びポップアップ表示されます。

detach()の使用方法について簡単に説明します。

(5) クロスブラウザイベントハンドラー

クロスブラウザでイベントを処理するには、主に次の 2 つの方法があります:

① ブラウザの違いを分離できる js ライブラリを使用します。

②最適なイベント処理メソッドを自分で書きます。ここでは機能検出が使用されています。つまり、ブラウザーの機能を識別します。ほとんどのブラウザーでコードが一貫して実行されるようにするには、バブリング段階だけに注目してください。

コードの手順は次のとおりです。 作成される最初のメソッドは addHandler (ブラウザ間の互換性の問題に対処するために使用されます。ここでは具体的なコードは示されていません) は、DOM0 レベルのメソッドを使用するか DOM2 レベルのメソッドを使用するかを決定することです。方法、状況に応じてイベントを追加する方法。 addHandler は、操作対象の要素、イベント名、イベント ハンドラー関数の 3 つのパラメーターを受け取ります。このメソッドは、EventUtil という名前のオブジェクトに属します。このオブジェクトは、ブラウザ間の違いを処理するためにここで使用されます。

addHandler に対応するメソッドは、removeHandler() で、これも同じパラメータを受け取ります。このイベントの役割は、以前に追加されたイベント ハンドラーを削除することです。イベントがオブジェクトにどのように追加されたとしても、他のメソッドが無効な場合は、デフォルトで DOM レベル 0 メソッドが使用されます。

使用EventUtil的方法如下:var btn=document.getElementById("myBtn");
var hander=function(){alert("hello")};//事件处理程序
EventUtil.addHandler(btn,"onclick",handler);
//其他代码
EventUtil.removeHandler(btn,"onclick",handler);
addHandler()和removeHandler()没有考虑到所有的浏览器问题,例如IE中作用域的问题,但是使用它们添加和移除事件处理程序还是足够了。

上面是我整理给大家的在js中详细介绍几种类型的事件处理程序的方式,希望今后会对大家有帮助。

相关文章:

重点解答动态加载JS脚本,一语道破

javascript中遍历EL表达式List集合中的值

如何在<script></script>标签中一样可以使用el表达式

以上がJS のいくつかのタイプのイベント ハンドラーの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)