JavaScript教程之事件处理

简介: JavaScript教程之事件处理

1、什么是事件


通过鼠标、键盘对浏览器页面所做的动作就是事件。

事件一旦发生需要有事件处理,该处理称为“事件驱动”,事件驱动通常由函数担任

onclick:鼠标点击

onmouseover:鼠标移入

onmouseout:鼠标移出

onkeyup:键盘按下并抬起

onkeydown:键盘按下

onchange:内容改变

onblur:失去焦点

onfocus:获得焦点

onsubmit:表单提交


2、设置事件


2.1、dom一级事件设置


1. ①<input  type=”text”  onclick=”函数名称()” />
2. function 函数名称(){this[window]}
3. 
4. ②<input  type=”text” onclick=”过程代码this[itnode]” />
5. 
6. ③itnode.onclick = function(){this[itnode]}  匿名函数
7. 
8. ④itnode.onclick = 函数名称;   有名函数
9. function 函数名称(){this[itnode]}
10. 
11. 取消dom1级事件:
12. itnode.onclick = null;


2.2、dom二级事件设置


1. 1) 主流浏览器方式(包括IE9以上 版本浏览器):
2. itnode.addEventListener(事件类型,事件处理[,事件流]);       //设置
3. itnode.removeEventListener(事件类型,事件处理[,事件流]);    //取消
4. 2) IE浏览器方式(IE6/7/8):
5. itnode.attachEvent(事件类型,事件处理);      //设置
6. itnode.detachEvent(事件类型,事件处理);  //取消
7. 
8.     事件类型:就是我们可以设置的具体事件,例如onclick/onmouseover等
9.               主流浏览器方式没有”on标志”,例如addEventListener(‘click’,...);
10. IE浏览器方式有”on”标志,例如attachEvent(‘onclick’)
11.     事件处理:事件驱动,可以是一个有名/匿名 函数
12.               例如addEventListener(‘click’,function(){}/有名函数);
13.     事件流:true捕捉型、[false冒泡型]
14. 
15. 事件取消(removeEventListener/detachEvent)操作具体要求:
16. ①   事件处理 必须是有名函数,不可以是匿名函数。
17. ②   事件取消的参数与绑定的参数完全一致(数量/内容)
18. 
19. dom2级事件设置的特点:
20. ①   可以为同一个对象设置多个同类型事件。
21. ②   事件取消也非常灵活。
22. ③   对事件流也有很好的处理控制。
1. <html>
2. <head>
3. <title>事件设置</title>
4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5. <meta name="description" content="" />
6. <meta name="keywords" content="" />
7. 
8. <script type="text/javascript">
9. </script>
10. 
11. <style type="text/css">
12. div{width:300px; height:200px; background-color:pink;}
13. </style>
14. </head>
15. <body>
16. <h2>dom2级事件设置</h2>
17. <div>Today is cloud</div>
18. </body>
19. </html>
20. <script type="text/javascript">
21. //给div进行事件的设置
22. var dv = document.getElementsByTagName('div')[0];
23. //dv.addEventListener(事件类型,事件处理[,事件流]);
24. dv.addEventListener('click',function(){
25. //事件处理过程
26.     dv.style.backgroundColor = "lightblue";
27. });
28. 
29. </script>
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2. <html>
3. <head>
4. <title>新建网页</title>
5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6. <meta name="description" content="" />
7. <meta name="keywords" content="" />
8. 
9. <script type="text/javascript">
10. </script>
11. 
12. <style type="text/css">
13. div{width:300px; height:200px; background-color:pink;}
14. </style>
15. </head>
16. <body>
17. <h2>dom2级事件取消操作</h2>
18. <div>everyday is beautiful</div>
19. <input type="button" value="取消" onclick="cancel()" />
20. </body>
21. </html>
22. <script type="text/javascript">
23. var dv = document.getElementsByTagName('div')[0];
24. //事件取消操作
25. function cancel(){
26. //有名函数可以取消,并且事件"取消参数"与"绑定参数"完全一致
27.     dv.removeEventListener('click',f1);
28.     dv.removeEventListener('mouseover',over);
29. }
30. 
31. dv.addEventListener('click',function(){ dv.style.backgroundColor = "lightblue";});
32. 
33. dv.addEventListener('click',function(){ console.log('I am here');});
34. 
35. function over(){dv.style.backgroundColor = "lightgreen";}
36. dv.addEventListener('mouseover',over);//直接拔事件处理函数名字设置上(没有()括号的)
37. 
38. function out(){dv.style.backgroundColor = "pink";}
39. dv.addEventListener('mouseout',out);
43. </script>


3、事件流


多个彼此嵌套元素,他们拥有相同的事件,最内部元素事件被触发后,外边多个元素的同类型事件也会被触发,多个元素他们同类型事件同时执行的效果称为“事件流”• 1
1. 事件流分为两种类型(如果学过flash的话,可以看出非常相似):
2. 冒泡型:事件从内部往外部依次执行。
3. 捕捉型:事件从外部往内部依次执行。
4. //addEventListener(类型,处理,事件流true捕捉/[false冒泡]);
5. 
6. IE浏览器从开始到后期事件流始终是“冒泡型”的,直到IE9以后版本两种都开始支持。
7. 网景的Navigator浏览器(现在火狐浏览器的许多血统来源于navigator浏览器)一开始的事件流是”捕捉型”。后期事件流有改进,针对捕捉型、冒泡型都可以支持。

4、事件对象

事件对象,每个事件(包括鼠标、键盘事件)触发执行的过程中,都有对应的事件对象,通过事件对象可以获得鼠标相对页面的坐标信息、通过事件对象也可以感知什么键子被 触发执行、通过事件对象还可以阻止事件流产生、阻止浏览器默认动作。• 1

4.1、获取事件对象

1. ①主流浏览器(IE9以上版本浏览器):
2.     事件处理函数的第一个形参就是 事件对象
3.     例如:
4.     node.onclick = function(evt){evt就是事件对象}
5. addEventListener(类型,function(evt){}/函数名字);
6. function 函数名称(evt){}
7.     红色的evt就是事件对象
8. ② IE(6/7/8)浏览器
9.     node.onclick = function(){window.event事件对象}
10.     全局变量event就是事件对象
11. 全局变量直接上级对象是window。可以通过window访问全局变量信息。
12. window.document.getElementById()

4.2、事件对象的作用

1. 1) 获得鼠标的坐标信息
2. event.clientX/clientY;    //相对dom区域坐标
3. event.pageX/pageY;        //相对dom区域坐标,给考虑滚动条距离
4. event.screenX/screenY;    //相对屏幕坐标
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2. <html>
3. <head>
4. <title>新建网页</title>
5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6. <meta name="description" content="" />
7. <meta name="keywords" content="" />
8. 
9. <script type="text/javascript">
10. </script>
11. 
12. <style type="text/css">
13. div{width:700px; height:3000px; background-color:pink;}
14. </style>
15. </head>
16. <body>
17. <h2>事件对象作用</h2>
18. <div>Today is very good</div>
19. </body>
20. </html>
21. <script type="text/javascript">
22. //获得鼠标坐标
23. var dv = document.getElementsByTagName('div')[0];
24. dv.onclick = function(evt){
25. console.log(evt.clientX+"---"+evt.clientY);//372---287 相对dom区域坐标
26. console.log(evt.pageX+"---"+evt.pageY);//372---2969 相对dom区域坐标,给计算滚动条距离
27. console.log(evt.screenX+"---"+evt.screenY);//850---310 相对屏幕坐标
28. }
29. </script>
1. 2) 阻止事件流:
2. event.stopPropagation();  //主流浏览器
3.     window.event.cancelBubble = true; // IE(678)浏览器
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2. <html>
3. <head>
4. <title>新建网页</title>
5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6. <meta name="description" content="" />
7. <meta name="keywords" content="" />
8. 
9. <script type="text/javascript">
10. </script>
11. 
12. <style type="text/css">
13. div{width:400px; height:300px; background-color:pink;}
14. p{width:300px; height:200px; background-color:lightgreen;}
15. span{background-color:lightblue;}
16. </style>
17. </head>
18. <body>
19. <h2>事件流效果</h2>
20. <div>
21. <p>
22. <span>哈哈哈哈</span>
23. </p>
24. </div>
25. </body>
26. </html>
27. <script type="text/javascript">
28. var dv = document.getElementsByTagName('div')[0];
29. var ps = document.getElementsByTagName('p')[0];
30. var sn = document.getElementsByTagName('span')[0];
31. dv.addEventListener('click',
32. function(evt){
33. console.log('11111');
34.         evt.stopPropagation(); //阻止事件流
35.     });
36. ps.addEventListener('click',
37. function(evt){
38. console.log('22222');
39.         evt.stopPropagation(); //阻止事件流
40.     });
41. sn.addEventListener('click',
42. function(evt){
43. console.log('33333');
44.         evt.stopPropagation(); //阻止事件流
45.     });
46. </script>
1. 3) 感知被触发键盘键子信息
2. event.keyCode  获得键盘对应的键值码信息
3.     通过事件触发时候获得的keyCode数值码信息可以对应键盘的键子信息。
1. 4) 阻止浏览器默认动作
2.     浏览器默认动作,注册form表单页面,提交表单的时候,浏览器的页面会根据action属性值进行跳转,这个动作称为“浏览器默认动作”。
3. form表单提交的时候,需要对各个表单域进行验证,如果验证失败则禁止浏览器跳转。
4. 
5. event.preventDefault();     //主流浏览器(dom1和dom2级事件都起作用)   
6. event.returnValue = false;  //IE(678)浏览器
7. return  false;              //dom1级事件设置起作用


5、加载事件onload


1. 什么是加载事件:
2. js代码执行时候,需要html&css的支持,就让html代码先执行(先进入内存),js代码后执行
3. js代码在最后执行的过程就是“加载过程”,通常通过“加载事件”实现加载过程
4. 
5. 加载事件onload可以保证js代码后于html&css执行,其要在最后执行。
6. 具体设置:
7. <body onload=”加载函数()”>
8.     window.onload = 匿名/有名 函数;  //推荐

$(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); });

相关文章
|
2月前
|
JavaScript 前端开发 网络协议
​Node.js 教程(一) 基本概念与基本使用
​Node.js 教程(一) 基本概念与基本使用
|
3月前
|
JavaScript 前端开发
|
3月前
|
JavaScript 算法
|
3月前
|
JavaScript
|
22天前
|
JavaScript
事件触发、事件捕获与事件冒泡(js的问题)
事件触发、事件捕获与事件冒泡(js的问题)
12 0
|
3天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
19 2
|
24天前
|
JavaScript 前端开发 流计算
JS:oninput和onchange事件的区别
JS:oninput和onchange事件的区别
21 1
|
1月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
17 0
|
1月前
|
JavaScript 前端开发
JS页面加载事件
JS页面加载事件
|
1月前
|
JavaScript