検索
ホームページウェブフロントエンドjsチュートリアルJavascript イベント ハンドラーのいくつかのメソッドに関する簡単な説明_JavaScript スキル

イベントは、ユーザーまたはブラウザ自体によって実行されるアクションです。たとえば、クリックとマウスオーバーはイベントの名前です。イベントに対応する関数をイベントハンドラ(またはイベントリスナー)と呼びます。イベントのハンドラーを指定するにはいくつかの方法があります。
1: HTML イベント ハンドラー。
例:

コードをコピー コードは次のとおりです:

type="button " value="click me" onclick="show()"/>


現在、このメソッドがより頻繁に使用されていると思いますが、イベント ハンドラーをhtml デメリットは2つあります。
(1) まず第一に、時差の問題があります。この例では、show() 関数がボタンの下とページの下部に定義されていると仮定すると、ページが show() 関数を解析する前にユーザーがボタンをクリックすると、エラー
(2) が発生します。 ) 2 番目の欠点は、html が JavaScript コードと密接に結合していることです。時刻ハンドラを変更する場合は、HTML コードと JavaScript コードの 2 か所を変更する必要があります。
その結果、多くの開発者は HTML イベント ハンドラーを放棄し、代わりに JavaScript を使用してイベント ハンドラーを指定しています。

2: Javascript 指定イベント ハンドラー
JavaScript 指定イベント ハンドラーには 3 つのメソッドが含まれます:
(1): DOM レベル 0 イベント ハンドラー
例:


コードをコピーします コードは次のとおりです。
var btn=document.getElementById("mybtn"); //Getボタンのリファレンス
btn.onclick=function(){
alert('clicked')
alert(this.id); // mybtn


追加されたイベント ハンドラーは、イベント フローのバブリング フェーズ中に処理されます。
DOM0 レベルのメソッドで指定されたイベント ハンドラーを削除します:
btn.onclick=null; // イベント ハンドラーを削除します
}
(2):DOM2 レベルのイベント ハンドラー
DOM2 レベルのイベントイベント ハンドラーの指定と削除の操作を処理するために、addEventListener() と RemoveEventListener() という 2 つのメソッドが定義されています。これら 2 つのメソッドはすべての DOM ノードに含まれており、どちらも 3 つのパラメーター (処理するイベントの名前、イベント ハンドラーとしての関数、およびブール値) を受け入れます。最後のパラメータが true の場合は、イベント ハンドラーがキャプチャ フェーズで呼び出されることを意味し、fasle の場合は、イベント ハンドラーがバブリング フェーズで呼び出されることを意味します。
例:


var btn= document.getElementById( "mybtn");
btn.addEventListener("click",function(){
alert(this.id);
},false); >DOM2 レベルを使用する イベント ハンドラーの主な利点は、複数のイベント ハンドラーを追加できることです。
例:



コードをコピー
コードは次のとおりです: var btn= document.getElementById( "mybtn"); btn.addEventListener("click",function(){ alert(this.id);
},false); click",function (){
alert("hello world!");
},false);


ここでボタン用に 2 つのイベント ハンドラーが追加されます。 2 つのイベント ハンドラーは、発生した順序で起動されます。
addEventListener() によって追加された時間ハンドラーは、removeEventListener() を使用してのみ削除できます。削除時に渡されるパラメーターは、追加時に使用されるものと同じです。これは、addEventListener() を通じて追加された匿名関数は削除できないことも意味します。
例:



コードをコピー

コードは次のとおりです: var btn= document.getElementById( "mybtn"); btn.addEventListener("click",function(){ alert(this.id); },false); >btn.removeEventListener("click",function(){ //このように書いても無駄です(2回目は1回目とは全く別の関数なので)
alert(this.id);
}, false);


解決策:




コードをコピーします

コードは次のとおりです:
var btn=document.getElementById("mybtn"); var hander=function(){ alert(this.id) }; "click" ,hander,false); btn.removeEventListener("click",hander,false); // 有効

注: ここでの 3 番目のパラメーターはすべて false であり、バブリング段階で追加されます。ほとんどの場合、さまざまなブラウザーとの互換性を最大限に高めるために、イベント ハンドラーはイベント フローのバブリング ステージに追加されます。
3: IE イベント ハンドラー
IE は、DOM のメソッドと同様の 2 つのメソッド、attachEvent() と detachEvent() を実装します。どちらのメソッドも、イベント ハンドラー名とイベント ハンドラー関数という同じ 2 つのパラメーターを受け入れます。 IE は時間バブリングのみをサポートしているため、attachEvent() を通じて追加されたすべてのイベント ハンドラーはバブリング ステージに追加されます。
例:

3:
コードをコピー コードは次のとおりです:

var btn=document.getElementById("mybtn");
btn.attachEvent("onclick",function(){
alert("clicked");
})

注:attachEvent() 関数の最初のパラメータは、DOM の addEventListener() の「click」ではなく、「onclick」です。
attachEvent() メソッドを使用して、要素に複数のイベント ハンドラーを追加することもできます。
例:
コードをコピー コードは次のとおりです:

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

AttachEvent() がここで 2 回呼び出され、同じボタンに 2 つの異なるイベント ハンドラーが追加されます。ただし、DOM メソッドとは異なり、これらのイベント ハンドラーは追加された順序では実行されず、逆の順序で起動されます。この例でボタンをクリックすると、最初に「hello world」が表示され、次に「クリックされました」と表示されます。
attachEvent() を使用して追加されたイベントは、同じパラメータであれば detachEvent() で削除できます。

コードをコピー コードは次のとおりです。
var btn=document.getElementById("mybtn ");
var hander=function(){
alert("clicked");
}
btn.detachEvent("onclick",hander}); //

上記の 3 つのメソッドは現在、主要なイベント ハンドラー メソッドです。これを見ると、ブラウザーごとに異なる違いがあるため、ブラウザー間イベント ハンドラーをどのように確保するか? と考えるでしょう。
クロスブラウザー方式でイベントを処理するために、多くの開発者はブラウザーの違いを分離できる Javascript ライブラリを使用しており、一部の開発者は最適なイベント処理メソッドを独自に開発しています。
ここでは EventUtil オブジェクトが提供されており、ブラウジング中の差異を処理するために使用できます。


var EventUtil = {
addHandler: function(element, type, handler){ // このメソッドは 3 つのパラメータを受け入れます: 操作対象の要素、イベント名、イベントhandler function
if (element.addEventListener){ //渡された要素に DOM2 レベルのメソッドがあるかどうかを確認します
element.addEventListener(type, handler, false) // 存在する場合は、このメソッドを使用します} else if (element .addEvent){ // IE メソッドがある場合は、
element.attachEvent("on" type, handler); // ここでのイベント タイプにはプレフィックスを付ける必要があることに注意してください。 「オン」で。
} else { // 最後の可能性は、DOM0 レベルを使用することです
element["on" type] = hander;
}
},

removeHandler: function(element, type, handler){ // このメソッドは、以前に追加されたイベント ハンドラーを削除します
if (element.removeEventListener){ // 渡された要素が存在するかどうかを確認します DOM2 レベルのメソッド
element.removeEventListener(type, handler) , false); // 存在する場合はこのメソッドを使用します
} else if (element.detachEvent){ // 存在する場合は IE のメソッド
element.detachEvent("on" type, handler);次に、IE メソッドを使用します。ここでのイベント タイプには先頭に「on」を付ける必要があることに注意してください。
} else { // 最後の可能性は、DOM0 とメソッドを使用することです (最新のブラウザでは、ここのコードは実行しないでください)
element["on" type] = null;


EventUtil オブジェクトは次のように使用できます:



コードをコピー

コードは次のとおりです:

var btn =document.getElementById("mybtn");
var hander= function(){
alert("clicked")
};コードの一部は省略されています
EventUtil.addHandler(btn,"click",hander);
//ここではコードの一部が省略されています
EventUtil.removeHandler(btn,"click",hander); //削除前 追加したイベントハンドラ

が表示されます イベントハンドラの追加と削除にはaddHandlerとremoveHandlerを使うととても便利です。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python GUI编程:快速上手,轻松打造交互式界面Python GUI编程:快速上手,轻松打造交互式界面Feb 19, 2024 pm 01:24 PM

pythonGUI编程简述GUI(GraphicalUserInterface,图形用户界面)是一种允许用户通过图形方式与计算机交互的方式。GUI编程是指使用编程语言来创建图形用户界面。Python是一种流行的编程语言,它提供了丰富的GUI库,使得PythonGUI编程变得非常简单。PythonGUI库介绍Python中有许多GUI库,其中最常用的有:Tkinter:Tkinter是Python标准库中自带的GUI库,它简单易用,但功能有限。PyQt:PyQt是一个跨平台的GUI库,它功能强大,

如何在C++中管理完整的循环队列事件?如何在C++中管理完整的循环队列事件?Sep 04, 2023 pm 06:41 PM

介绍CircularQueue是对线性队列的改进,它被引入来解决线性队列中的内存浪费问题。循环队列使用FIFO原则来插入和删除其中的元素。在本教程中,我们将讨论循环队列的操作以及如何管理它。什么是循环队列?循环队列是数据结构中的另一种队列,其前端和后端相互连接。它也被称为循环缓冲区。它的操作与线性队列类似,那么为什么我们需要在数据结构中引入一个新的队列呢?使用线性队列时,当队列达到其最大限制时,尾指针之前可能会存在一些内存空间。这会导致内存损失,而良好的算法应该能够充分利用资源。为了解决内存浪费

PHP8.0中的事件处理库:EventPHP8.0中的事件处理库:EventMay 14, 2023 pm 05:40 PM

PHP8.0中的事件处理库:Event随着互联网的不断发展,PHP作为一门流行的后台编程语言,被广泛应用于各种Web应用程序的开发中。在这个过程中,事件驱动机制成为了非常重要的一环。PHP8.0中的事件处理库Event将为我们提供一个更加高效和灵活的事件处理方式。什么是事件处理在Web应用程序的开发中,事件处理是一个非常重要的概念。事件可以是任何一种用户行

冒泡事件的含义是什么冒泡事件的含义是什么Feb 19, 2024 am 11:53 AM

冒泡事件是指在Web开发中,当一个元素上触发了某个事件后,该事件将会向上层元素传播,直到达到文档根元素。这种传播方式就像气泡从底部逐渐冒上来一样,因此被称为冒泡事件。在实际开发中,了解和理解冒泡事件的工作原理对于正确处理事件十分重要。下面将通过具体的代码示例来详细介绍冒泡事件的概念和使用方法。首先,我们创建一个简单的HTML页面,其中包含一个父级元素和三个子

Vue中的v-on指令解析:如何处理表单提交事件Vue中的v-on指令解析:如何处理表单提交事件Sep 15, 2023 am 09:12 AM

Vue中的v-on指令解析:如何处理表单提交事件在Vue.js中,v-on指令用于绑定事件监听器,可以捕获并处理各种DOM事件。其中,处理表单提交事件是Vue中常见的操作之一。本文将介绍如何使用v-on指令处理表单提交事件,并提供具体的代码示例。首先,需要明确Vue中的表单提交事件指的是当用户点击submit按钮或按下回车键时触发的事件。在Vue中,可以通过

Vue中使用$listeners传递事件处理函数Vue中使用$listeners传递事件处理函数Jun 11, 2023 pm 03:09 PM

在Vue中常常会有一些组件嵌套的情况,而这些嵌套的组件之间需要进行事件的传递。在Vue中,使用了$emit事件来进行组件之间的事件通信。但是,在某些情况下,我们需要将一个父组件的事件处理函数传递给嵌套的子组件,这时候,使用$emit事件就不太合适了。这时候,可以使用Vue提供的$listeners来进行事件处理函数的传递。那么,什么是$listeners呢?

事件冒泡的实际应用和适用事件类型事件冒泡的实际应用和适用事件类型Feb 18, 2024 pm 04:19 PM

事件冒泡的应用场景及其支持的事件种类事件冒泡是指当一个元素上的事件被触发时,该事件会被传递给该元素的父元素,再传递给该元素的祖先元素,直到传递到文档的根节点。它是事件模型的一种重要机制,具有广泛的应用场景。本文将介绍事件冒泡的应用场景,并探讨它所支持的事件种类。一、应用场景事件冒泡在Web开发中有着广泛的应用场景,下面列举了几个常见的应用场景。表单验证在表单

深入研究PHP和Vue在脑图功能中的关键代码实现深入研究PHP和Vue在脑图功能中的关键代码实现Aug 27, 2023 pm 12:15 PM

深入研究PHP和Vue在脑图功能中的关键代码实现摘要:本文将深入探讨PHP和Vue在实现脑图功能中的关键代码实现。脑图是一种常用于展示思维结构和关联关系的图形工具,被广泛应用于项目规划、知识管理和信息整理等领域。通过学习PHP和Vue的相关知识,我们可以实现一个简单而功能强大的脑图应用。了解PHPPHP是一种常用的服务器端脚本语言。它具有简单易学、可扩展性强

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ヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、