5 /**
6 * 事件
7 */
8 /**事件流
9 * 1、事件冒泡 IE事件流叫事件冒泡 event bubbling 即由具体到不具体
10 * 2、事件捕获 从最不具体到具体 Safari chrome opera Firefox都支持事件捕获
11 * 3、DOM事件流 包含三个阶段:
12 * (1)事件捕获阶段
13 * (2)处于目标阶段
14 * (3)事件冒泡阶段*/
15
16 /**
17 * 事件处理程序或者事件监听器
18 * 事件定义:事件就是用户或者浏览器自身执行的某种动作 如click load。。。
19 * 1、HTML事件处理程序 就是在HTML元素中调用JavaScript
20 * 使用缺点:(两个)
21 * HTML与JavaScript代码紧密耦合,如果要更换事件处理程序,就要改动两个地方 HTML代码和JavaScript代码
22 * (自己发现的bug:当用HTML事件时 用原生的
23 * window.onload = function(){
24 * var handleFunc = function(){alert("这是HTML事件!");}
25 * }加载完在执行时会报错),所以尽量不要使用HTML事件流
26 * 比如:eventUtils.html:10 Uncaught ReferenceError: handleFunc is not defined)
27 * 2、DOM0级事件处理程序 就是将一个函数赋值给一个事件处理程序属性
28 * 使用前提首先必须取得一个要操作的对象引用
29 * 使用优点:(两个)
30 * 简单 具有跨浏览器的优势
31 * 注意点:
32 * 制定事件事件处理程序时,在这一段运行以前不会制定事件处理程序,因此如果这些代码在页面中位于
33 * 按钮后面,就有可能在一段事件内怎么单击都没有反应。
34 * 使用DOM0级方法指定的事件处理程序被认为是元素的方法,在这时候的事件处理程序时在元素的作用域
35 * 中运行,也就是说程序中的this引用当前元素
36 * 这种方式添加事件处理会在事件流的冒泡阶段处理。
37 * 取消DOM0级事件方法:
38 * 将事件程序属性值设计为null
39 * 如:btn.onclick = null;单击按钮将不会有任何动作发生
40 *
41 * (自己发现的bug:
42 * window.onload = function(){
43 var handleFunc = function(msg){
44 alert(msg);
45 }
46
47 //DOM0事件
48 var btn = document.getElementById("btn0");
49 btn.onclick = handleFunc("这是DOM0级事件!");//当使用这个调用函数时,文档加载的过程中就会
50 执行一次handleFunc函数,再次点击事件时没有函
51 数没有响应,也不会报错。所以使用DOM0级事件时
52 并要调用函数时尽量把要调用的函数写在事件中如:
53 btn.onclick = function(){alert("这是DOM0级事件!");}
54 };
55 * )
56 * 3、DOM2级事件处理程序 定义了两个事件 addEventListener()和removeEventListener()方法
57 * 优点:所有的DOM节点都包含两个方法并且都接受3个参数即 要处理的事件名 作为事件处理城西的函数 一个布尔值
58 * 可以添加多个事件处理程序
59 * 最后一个布尔值 若是true表示捕获阶段调用事件处理程序
60 * 若是false表示冒泡阶段调用事件处理程序,一般情况下都是把事件程序调价到事件流的冒泡阶段,
61 * 这样可以最大限度兼容各种浏览器
62 * 注意点:当使用removeEventListener()删除事件处理程序时,函数的三个参数都要一样,否则不能删除事件处理程序。
63 * 因为removeEventListener()和addEventListener()的第二个函数要是各自自己写的话这两个函数就是不同的函数
64 * 所以一般使用方式为:
65 * addEventListener(event,handle,false);
66 * removeEventListener(event,handle,false);把handle函数抽出来单独写。
67 * */
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>事件</title>
6 <script type="text/javascript" src="eventUtils.js"></script>
7 </head>
8 <body>
9 <div id="event">
10 <input type="button" value="html事件" onclick="handleFunc('这是HTML事件!')" /><!--HTML事件--> <!--handleFunc执行时会报错 -->
11 <!-- eventUtils.html:10 Uncaught ReferenceError: handleFunc is not defined-->
12 <input type="button" value="DOM0事件" id="btn0" />
13 <input type="button" value="DOM2事件" id="btn2" />
14 </div>
15 <script type="text/javascript">
16 window.onload = function(){
17 var handleFunc = function(msg){
18 alert(msg);
19 }
20 var handleDOM2 = function(){
21 alert("dom2级事件!");
22 }
23
24 //DOM0事件
25 var btn = document.getElementById("btn0");
26 //btn.onclick = handleFunc("这是DOM0级事件!");//不要这样调用,否则会出错并且文档加载中会自动执行一次handleFunc函数
27 btn.onclick = function(){
28 handleFunc("这是DOM0级事件!");
29 }
30
31 //DOM2级事件
32 var btn2 = document.getElementById("btn2");
33 btn2.addEventListener("click", handleDOM2, false);
34 btn2.removeEventListener("click", handleDOM2, false);
35 }
36 </script>
37 </body>
38 </html>