javaScript高级教程(五) Event Flow
1.两个阶段三个模型:Netscape支持事件捕获,IE支持事件冒泡,w3c是先捕获后冒泡
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Event Flow</title>
- <link rel="stylesheet" type="text/css" href="style.css" />
- <script type="text/javascript">
- function init(){
- function modifiedAddEvent( obj, type, fn ) {
- if(obj.addEventListener) {
- // The W3C Way
- obj.addEventListener( type, fn, true ); //最后一个参数设为true,则只有在事件传播的捕获阶段,指定的listener才会被调用
- } else if ( obj.attachEvent ) {
- //The Microsoft Way
- obj['e'+type+fn] = fn;
- obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
- obj.attachEvent( 'on'+type, obj[type+fn] );
- } else {
- return false;
- }
- }
- var counter = 0;
- // Grab all the unordered lists
- var lists = document.getElementsByTagName('ul');
- for(var i = 0 ; i < lists.length ; i++ ) {
- // Register an event listener for the click event
- modifiedAddEvent(lists[i],'click',function() {
- // Append the click order to the paragraph
- var append = document.createTextNode(':' + counter++);
- this.getElementsByTagName('p')[0].appendChild(append);
- // Change the class name to reveal the clicked elements
- this.className = 'clicked';
- });
- }
- }
- </script>
- </head>
- <body onload="init()">
- <h1>Event Flow</h1>
- <div id="content">
- <ul id="list1">
- <li>
- <p>List 1 </p>
- <ul id="list2">
- <li>
- <p>List 2 </p>
- <ul id="list3">
- <li>
- <p>List 3 </p>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <ul id="list4">
- <p>List 4 </p>
- </ul>
- </div>
- </body>
- </html>
2.在chrome中运行
3.在IE8中运行
4.如果将上面的modifiedAddEvent函数中的 obj.addEventListener( type, fn, true)最后一个参数设为false,则在chrome中的结果与在IE8中的相同。
最后一个参数设为false,说明指定的listener是在冒泡阶段被调用。也就是说此时的事件模型与IE相同,所以两者结果相同。
5.把css文件附上。通过设置css,把list3放在了list4中。
- #content {
- width: 90%;
- }
- ul {
- padding:10px;
- margin:0;
- border:1px dotted black;
- background-color:white;
- list-style:none;
- }
- p {
- margin: 0;
- font-size:1.2em;
- font-weight: bold;
- }
- .clicked {
- background: #ffcf54;
- }
- #list1 {
- height:80px;
- }
- #list2 {
- margin-top: 10px;
- height:20px;
- }
- #list3 {
- position:absolute;
- top:190px;
- left:150px;
- }
- #list4 {
- margin-top:10px;
- height:100px;
- }
javaScript高级教程(五) Event Flow的更多相关文章
- JavaScript高级教程
JavaScript高级教程 基础总结深入 数据类型 分类 you are so nb! undefined :undefined string :任意字符串 sybmol: object:任意对象, ...
- javaScript高级教程(八)-----正则表达式温故知新
1.RegExp对象:五个属性二个方法 五个属性:global, ignoreCase,multiline,lastIndex,source 二个方法: exec()--模式匹配 test()--检测 ...
- javascript高级教程:如何优化javascript代码性能
在web前端开发中,为实现一些动态效果,减小页面大小,我们一般都会使用JavaScript技术来进行相关设置.但是初学者在编写JavaScript代码的时候,往往都是比较低质的代码,那如何才能提高Ja ...
- JavaScript高级程序设计(五): js的关键字instanceof和typeof使用
JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符 ...
- 《JavaScript高级教程》学习笔记一、变量和数据类型
JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的. 一.变量和数据类型 1. 变量 JavaSript是弱类型语言,可以通过var定义任何类型变 ...
- javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...
- javaScript高级教程(七)正则表达式中括号三种常见作用
括号用来将子表达式标记起来,以区别于其他表达式 比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式: h(elp)? 字符h之后的elp可有可无这里 ...
- javaScript高级教程(二)Scope Chain & Closure Example
<!DOCTYPE html> <html> <head> <meta charset=gb2312 /> <title>js</ti ...
- javascript 高级程序设计 五
1.变量: ECMAScript中的基本类型都是值类型Boolean,Number,Null,Undefined和String,在这里JS和其他的语言有所不同,就是JS中的String是值类型 而不像 ...
随机推荐
- tts文本转语音服务
1. 谷歌tts http://translate.google.cn/translate_tts?ie=UTF-8&tl=zh-CN&q=谷歌 2. 百度tts http://tts ...
- 通过java的i/o机制进行图片流的存储以及对网络图片的存储
存储内地图片思路:首先把原有的图片以流的方式读取出来,再以流的方式存储到目标文件: package imgStream; import java.io.*; public class ImgStrea ...
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
一个关于协同程序的经典示例是“生产者-消费者”问题.这其中涉及到两个函数,一个函数不断地产生值(比如从一个文件中读取值),另一个则不断地消费这些值(比如将这些值写到另一个文件).通常,这两个函数大致是 ...
- PHP关于=>和->以及::的用法
1.=>的用法 在php中数组默认键名是整数,也可以自己定义任意字符键名(最好是有实际意义),如: $css=array('style'=>'0',‘color’=>‘green‘) ...
- 【linux系列】centos安装vsftp
一.检查vsftpd软件 如果发现上不了网可以修改配置文件中的ONBOOT=no改为yes,然后重启服务试试
- echarts - 特殊需求实现方案汇总
五分钟上手echarts echarts中 设置x||y轴文案.提示文字等为固定字数,超出显示"..." 关于echarts下钻功能的一些总结.js echarts - 特殊需求实 ...
- SharpGL学习笔记(二) 模型变换(几何变换)
(二) 模型变换 模形变换就是指的在世界坐标系中(world space)做“移动”,“旋转", "缩放"三种操作. 首先要说明的,在Opengl中,是用4x4矩阵进行坐 ...
- LeetCode 18 4Sum (4个数字之和等于target)
题目链接 https://leetcode.com/problems/4sum/?tab=Description 找到数组中满足 a+b+c+d=0的所有组合,要求不重复. Basic idea is ...
- Linux下重启mysql的时候出现 start: Job failed to start
mysql进程自己退出了,使用如下指令确认mysql进程不在了. ps -ef | grep mysql 看不到mysql进程 mysql进程不在,尽快回复服务的想法,就是重启服务 /etc/init ...
- 使用DnsCat反弹shell
DnsCat技术特点 Dns隧道反弹shell DnsCat服务器的安装 #git clone https://github.com/iagox86/dnscat2.git #cd dnscat2 # ...