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

简介: 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>

目录
相关文章
|
7月前
|
JavaScript
如何写事件冒泡和事件捕捉?
如何写事件冒泡和事件捕捉?
|
7月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
49 2
|
2月前
|
JavaScript 前端开发
事件冒泡和事件捕获的原理和区别
【10月更文挑战第15天】事件冒泡和事件捕获的原理和区别
|
3月前
|
JavaScript 容器
解释一下事件委托的工作原理
【9月更文挑战第6天】解释一下事件委托的工作原理
30 7
|
7月前
|
JavaScript 前端开发
js开发:请解释什么是事件委托(event delegation),并给出一个示例。
事件委托是JavaScript中优化事件处理的技术,通过绑定事件处理器到共享的父元素,利用事件冒泡机制来处理子元素的事件。这种方法能提升性能、简化代码并降低内存消耗。示例展示了如何在父元素上监听`click`事件,然后通过`event.target`识别触发事件的具体子元素(如`&lt;li&gt;`),实现对动态生成列表项的点击事件处理。
52 1
|
7月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
47 0
|
JavaScript
请解释什么是事件代理
请解释什么是事件代理
|
JavaScript 前端开发 UED
js事件的作用和用法
js事件的作用和用法
113 0
|
JavaScript 容器
弄懂事件委托
弄懂事件委托
68 0