Maison interface Web js tutoriel JavaScript学习笔记(5)事件处理之事件流与事件处理函数分配

JavaScript学习笔记(5)事件处理之事件流与事件处理函数分配

Dec 19, 2016 pm 05:35 PM

如果你在页面上做一次点击例如点击一个按钮,那么你是首先点击了该按钮然后动作传入了按钮的容器,最后传入整个页面Document还是首先点击了页面Document,然后是按钮的容器,最后导致按钮的点击呢?
  javaScript对这种问题的处理方式可以称之为事件流即事件的传播机制。对于事件流IE跟FF有不同的解释。IE下的解决方案称之为:冒泡型事件,而FF下称之为:捕获型事件。顾名思义冒泡型事件是从低而上的触发机制,而捕获型事件则是从上到下的触发机制。《Javascript高级程序设计》一书提到:
    DOM事件流同时支持两种事件触发机制,但是捕获型事件先发生。注意因为事件的目标(也就是DOM树最深的节点)是最精确的元素,实际上它会连续接收两次事件,一次是在捕获过程中,一次是在冒泡过程中。事情到底是不是这样呢?观察下面的程序:

 
    JAVASCRIPT事件流
   
   
 
 
   

click me!

 

IE:点击 click me 运行顺序为:DIV-->BODY-->HTML 点击页面其他部分:BODY-->HTML
FF: 点击 click me 运行顺序为:DIV-->HTML-->BODY 点击页面其他部分:HTML-->BODY 
  呵呵,好像跟书上说的不太一样哦!程序的运行结果告诉我们:不管是在IE下还是在Firefox下,事件总是由最精确的元素(也就是DOM树中最深的节点)首先触发,然后才开始IE下的冒泡和FireFox下的捕获。

  JavaScript为我们提供了三种事件处理函数的分配方式,第一种就像上面的程序一样,是在HTML代码中分配事件处理函数。
第二种方法是在JavaScript中分配事件处理函数,这种方法首先必须得获得要分配事件处理函数的元素的引用,参考以下程序:
1         window.onload = function(){
2             var oDiv = document.getElementById("contentDiv");
3             oDiv.onclick = function(){
4                 alert(oDiv.innerHTML);
5             }
6         }就像上面提到的,该方法在分配事件处理函数时必须保证已经获得对该元素的引用,所以这个程序才把oDiv的onclick事件放在了onload事件的内部,否则会报oDiv未被定义。还有一个需要注意的地方是使用这种事件处理函数的分配方式时只能为某个特定的事件分配一个函数且事件函数的签名必须小写,否则前面分配的函数会被后面的函数所覆盖,如果想为同一个事件分配两个以上的处理函数,需要采用第三种事件处理函数分配方式。
  在IE中我们使用obj.attachEvent()方法为某个元素分配函数,使用obj.detachEvent()方法为某个元素分离事件处理函数,而在DOM(以FireFox为例)中我们使用addEventListener()方法分配函数,使用removeEventListener()方法分离函数。
  参考一下代码:
 1         window.onload = function(){
 2             var oDiv = document.getElementById("contentDiv");
 3             var func1 =  function(){
 4                 alert(oDiv.innerHTML);
 5             }
 6             var func2 = function(){
 7                 alert("also " + oDiv.innerHTML);
 8             }
 9             //IE
10             if(oDiv.attachEvent){
11                 oDiv.attachEvent("onclick",func1);
12                 oDiv.attachEvent("onclick",func2);
13                 //oDiv.detachEvent("onclick",func1);
14             } else if(oDiv.addEventListener){
15                 //FireFox
16                 oDiv.addEventListener("click",func1,true);
17                 oDiv.addEventListener("click",func2,true);
18                 //oDiv.removeEventListener("click",func1,true);
19             }
20             
21         }我们来说明一下IE下与FireFox下这种事件处理函数的不同点:
1、在函数的第一个参数中,IE下必须有"on"做为前缀,而FF下不用,两种情况下处理函数签名必须小写。
2、FireFox下的addEventListener()函数的第三个参数表示的是:true表示在捕获阶段增加事件处理函数,false表示在冒泡阶段增加事件处理函数,但是由于FireFox不支持冒泡事件流,所以这里我们设成True或者Flase好像没什么区别。但是要注意的一点就是,如果在 addEventListener()中第三个参数设为true,那么在removeEventListener()方法中的第三个参数一定也要设为相同的值,否则方法失效。
3、在运行时阶段,IE首先执行的是最后边一个被增加的事件处理函数然后才是倒数第二个以此类推,但是在FireFox下与IE相反,他会按照事件处理函数的添加顺序执行。

以上就是事件处理之事件流与事件处理函数分配的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Programmation GUI Python : démarrez rapidement et créez facilement des interfaces interactives Programmation GUI Python : démarrez rapidement et créez facilement des interfaces interactives Feb 19, 2024 pm 01:24 PM

Une brève introduction à la programmation GUI python L'interface graphique (Graphical User Interface, interface utilisateur graphique) est un moyen qui permet aux utilisateurs d'interagir graphiquement avec les ordinateurs. La programmation GUI fait référence à l'utilisation de langages de programmation pour créer des interfaces utilisateur graphiques. Python est un langage de programmation populaire qui fournit une riche bibliothèque GUI, ce qui rend la programmation GUI Python très simple. Introduction à la bibliothèque GUI Python Il existe de nombreuses bibliothèques GUI en Python, dont les plus couramment utilisées sont : Tkinter : Tkinter est la bibliothèque GUI fournie avec la bibliothèque standard Python. Elle est simple et facile à utiliser, mais ses fonctions sont limitées. PyQt : PyQt est une bibliothèque graphique multiplateforme dotée de fonctions puissantes.

Comment gérer une file d'attente circulaire complète d'événements en C++ ? Comment gérer une file d'attente circulaire complète d'événements en C++ ? Sep 04, 2023 pm 06:41 PM

Introduction CircularQueue est une amélioration des files d'attente linéaires, qui a été introduite pour résoudre le problème du gaspillage de mémoire dans les files d'attente linéaires. Les files d'attente circulaires utilisent le principe FIFO pour y insérer et supprimer des éléments. Dans ce tutoriel, nous aborderons le fonctionnement d'une file d'attente circulaire et comment la gérer. Qu'est-ce qu'une file d'attente circulaire ? La file d'attente circulaire est un autre type de file d'attente dans la structure de données où le front-end et le back-end sont connectés l'un à l'autre. Il est également connu sous le nom de tampon circulaire. Il fonctionne de la même manière qu’une file d’attente linéaire, alors pourquoi devons-nous introduire une nouvelle file d’attente dans la structure des données ? Lors de l'utilisation d'une file d'attente linéaire, lorsque la file d'attente atteint sa limite maximale, il peut y avoir de l'espace mémoire avant le pointeur de queue. Cela entraîne une perte de mémoire et un bon algorithme devrait être capable d’utiliser pleinement les ressources. Afin de résoudre le gaspillage de mémoire

Bibliothèque de traitement d'événements en PHP8.0 : Événement Bibliothèque de traitement d'événements en PHP8.0 : Événement May 14, 2023 pm 05:40 PM

Bibliothèque de traitement d'événements en PHP8.0 : Événement Avec le développement continu d'Internet, PHP, en tant que langage de programmation back-end populaire, est largement utilisé dans le développement de diverses applications Web. Dans ce processus, le mécanisme événementiel est devenu un élément très important. La bibliothèque de traitement d'événements Event en PHP8.0 nous fournira une méthode de traitement d'événements plus efficace et plus flexible. Qu'est-ce que la gestion des événements ? La gestion des événements est un concept très important dans le développement d'applications Web. Les événements peuvent être n'importe quel type de ligne utilisateur

Quelle est la signification des événements bouillonnants Quelle est la signification des événements bouillonnants Feb 19, 2024 am 11:53 AM

Les événements bouillonnants signifient que dans le développement Web, lorsqu'un événement est déclenché sur un élément, l'événement se propage aux éléments supérieurs jusqu'à ce qu'il atteigne l'élément racine du document. Cette méthode de propagation est comme une bulle qui monte progressivement du bas, c'est pourquoi on l'appelle un événement bouillonnant. Dans le développement réel, connaître et comprendre le fonctionnement des événements bouillonnants est très important pour gérer correctement les événements. Ce qui suit présentera en détail le concept et l’utilisation des événements bouillonnants à travers des exemples de code spécifiques. Tout d'abord, nous créons une simple page HTML avec un élément parent et trois enfants

Applications pratiques du bouillonnement d'événements et types d'événements applicables Applications pratiques du bouillonnement d'événements et types d'événements applicables Feb 18, 2024 pm 04:19 PM

Scénarios d'application du bouillonnement d'événements et types d'événements qu'il prend en charge. Le bouillonnement d'événements signifie que lorsqu'un événement sur un élément est déclenché, l'événement sera transmis à l'élément parent de l'élément, puis à l'élément ancêtre de l'élément jusqu'à ce qu'il soit transmis. est transmis au nœud racine du document. Il s'agit d'un mécanisme important du modèle d'événement et propose un large éventail de scénarios d'application. Cet article présentera les scénarios d'application du bouillonnement d'événements et explorera les types d'événements qu'il prend en charge. 1. Scénarios d'application La diffusion d'événements propose un large éventail de scénarios d'application dans le développement Web. Voici plusieurs scénarios d'application courants. validation du formulaire dans le formulaire

Étude approfondie de l'implémentation du code clé de PHP et Vue dans la fonction de carte cérébrale Étude approfondie de l'implémentation du code clé de PHP et Vue dans la fonction de carte cérébrale Aug 27, 2023 pm 12:15 PM

Étude approfondie de l'implémentation du code clé de PHP et Vue dans la fonction de carte cérébrale Résumé : Cet article explorera en profondeur l'implémentation du code clé de PHP et Vue dans la fonction de carte cérébrale. La cartographie cérébrale est un outil graphique couramment utilisé pour afficher les structures et les relations de pensée. Il est largement utilisé dans des domaines tels que la planification de projets, la gestion des connaissances et l'organisation de l'information. En acquérant les connaissances pertinentes de PHP et Vue, nous pouvons implémenter une application de cartographie cérébrale simple mais puissante. Comprendre PHPPHP est un langage de script côté serveur couramment utilisé. Il est facile à apprendre et hautement évolutif

Analyse de la directive v-on dans Vue : comment gérer les événements de soumission de formulaire Analyse de la directive v-on dans Vue : comment gérer les événements de soumission de formulaire Sep 15, 2023 am 09:12 AM

Analyse de la directive v-on dans Vue : Comment gérer les événements de soumission de formulaire Dans Vue.js, la directive v-on est utilisée pour lier les écouteurs d'événements et peut capturer et traiter divers événements DOM. Parmi eux, le traitement des événements de soumission de formulaire est l'une des opérations courantes dans Vue. Cet article explique comment utiliser la directive v-on pour gérer les événements de soumission de formulaire et fournit des exemples de code spécifiques. Tout d'abord, il est nécessaire de préciser que l'événement de soumission de formulaire dans Vue fait référence à l'événement déclenché lorsque l'utilisateur clique sur le bouton de soumission ou appuie sur la touche Entrée. Dans Vue, vous pouvez passer

Erreur Java : erreur de gestion des événements JavaFX, comment gérer et éviter Erreur Java : erreur de gestion des événements JavaFX, comment gérer et éviter Jun 24, 2023 pm 10:49 PM

En tant que langage de programmation populaire, Java rencontre souvent diverses erreurs et problèmes au cours du processus de développement. Parmi eux, les erreurs de gestion des événements JavaFX constituent un problème courant, qui peut entraîner le blocage ou l'échec de l'application. Cet article présentera les causes, les solutions et les mesures préventives des erreurs de traitement des événements JavaFX pour aider les développeurs à éviter et à gérer ces erreurs. Causes des erreurs Les erreurs de traitement des événements JavaFX sont généralement causées par les raisons suivantes : 1) Erreurs de code : lors de l'écriture du code JavaFX, des erreurs de code se produisent souvent.

See all articles