一个很经典的事件冒泡的例子

简介: Bubble in JavaScript DOM div * {display:block; margin:4px; padding:4px; border:1px solid white;} textar...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="developer" content="Realazy" />

<title>Bubble in JavaScript DOM</title>

<style type="text/css" media="screen">

 div * {display:block; margin:4px; padding:4px; border:1px solid white;}

 textarea {width:20em; height:2em;}

</style>

<script type="text/javascript">

    //<![CDATA[

    function init(){

  var log = document.getElementsByTagName('textarea')[0];

  var all = document.getElementsByTagName('div')[0].getElementsByTagName('*');

  for (var i = 0, n = all.length; i < n; ++i){

   all[i].onmouseover = function(e){

    this.style.border = '1px solid red';

 

    log.value = '鼠标现在进入的是: ' + this.nodeName;

   };

   all[i].onmouseout = function(e){

    this.style.border = '1px solid white';

   };

  }

 

  var all2 = document.getElementsByTagName('div')[1].getElementsByTagName('*');

  for (var i = 0, n = all2.length; i < n; ++i){

   all2[i].onmouseover = function(e){

    this.style.border = '1px solid red';

 

    if (e) //停止事件冒泡

     e.stopPropagation();

    else

     window.event.cancelBubble = true;

   

    log.value = '鼠标现在进入的是: ' + this.nodeName;

   };

   all2[i].onmouseout = function(e){

    this.style.border = '1px solid white';

   };

  }

 }

 window.onload = init;

    //]]>

</script>

</head>

<body>

<h1>Bubble in JavaScript DOM</h1>

<p>DOM树的结构是:</p>

<pre><code>

UL

  - LI

     - A

   - SPAN

</code></pre>

<div>

 <ul>

  <li><a href="#"><span>阿秀</span></a></li>

  <li><a href="#"><span>阿秀</span></a></li>

 </ul>

</div>

<textarea></textarea>

<p>鼠标进入UL的任何一个子元素,如果不停止冒泡,我们从ULSPAN都定义了鼠标悬停(<code>mouseover</code>)事件,这个事件会上升了UL,从而从鼠标所进入的元素到UL元素都会有红色的边。</p>

<div>

 <ul>

  <li><a href="#"><span>俊秀</span></a></li>

  <li><a href="#"><span>俊秀</span></a></li>

 </ul>

</div>

<p>如果停止冒泡,事件不会上升,我们就可以获取精确的鼠标进入元素。</p>

</body>

</html>

目录
相关文章
|
6月前
|
JavaScript 前端开发
解释JavaScript闭包的工作原理,并举例说明其在游戏开发中的应用。
JavaScript闭包允许内部函数访问并保持对外部函数变量的引用,即使外部函数执行结束。当函数返回内部函数时,形成闭包,继承父函数作用域链。在游戏开发中,闭包用于创建具有独立状态和行为的角色实例。例如,`createCharacter`函数创建角色并返回包含属性和方法的对象,内部函数如`getHealth`、`setHealth`和`attack`通过闭包访问并操作角色的变量。这种方式确保了每个角色的状态在不同实例间独立,是实现游戏逻辑的强大工具。
42 2
|
6月前
|
JavaScript
如何写事件冒泡和事件捕捉?
如何写事件冒泡和事件捕捉?
|
6月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
48 2
|
16天前
|
JavaScript 前端开发
事件冒泡和事件捕获的原理和区别
【10月更文挑战第15天】事件冒泡和事件捕获的原理和区别
|
2月前
|
JavaScript 容器
解释一下事件委托的工作原理
【9月更文挑战第6天】解释一下事件委托的工作原理
25 7
|
6月前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
40 1
|
6月前
|
JavaScript 前端开发
js开发:请解释什么是事件委托(event delegation),并给出一个示例。
事件委托是JavaScript中优化事件处理的技术,通过绑定事件处理器到共享的父元素,利用事件冒泡机制来处理子元素的事件。这种方法能提升性能、简化代码并降低内存消耗。示例展示了如何在父元素上监听`click`事件,然后通过`event.target`识别触发事件的具体子元素(如`&lt;li&gt;`),实现对动态生成列表项的点击事件处理。
49 1
|
6月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
44 0
|
JavaScript
请解释什么是事件代理
请解释什么是事件代理
|
JavaScript 前端开发 UED
js事件的作用和用法
js事件的作用和用法
112 0