【JavaScript】事件

简介:
	“事件”这一名词,在我们看来,已经是非常熟悉的了。在C/S项目中,我们都是通过触发各种事件来实现各种功能的。比如说:按钮点击事件,窗体加载事件等。而在B/S项目中,同样有事件这一概念。这篇博客就对JavaScript视频中关于事件的知识点做个总结。
 		导图中是视频(63-68集)关于讲解事件的全部内容,下面再具体总结一下。
	抽象部分
	一.JavaScript事件
	它是由访问Web页面的用户引起的一系列操作。例如:用户点击。当用户点击执行某些操作的时候,再去执行一系列代码。
	二.JavaScript有三种事件模型
	内联模型、脚本模型和DOM2模型。
	比较:内联模型与脚本模型
	内联是和HTML混写的,没有与HTML分离。
	举例:

//HTML中把事件处理函数作为属性执行JS代码(内联模型)
<input type="button" value="按钮" onclick=“alert('Lee');"/>
//在JavaScript中处理事件(脚本模型)
var input=document.getElementsByTagName('input')[0];
input.onclick=function(){
alert('Lee');
};
	三.JavaScript可以处理的事件类型
	鼠标、键盘和HTML事件。
	下面各列举几个实例:
	1.鼠标事件
	click:点击鼠标或按回车触发
input.onclick=function(){
    alert('Lee');
};
	mousedown:按下未弹起触发
input.onmousedown=function(){
    alert('Lee');
};
	2.键盘事件
	keydown:按任意键触发,如果不放,则重复触发
onkeydown=function(){
    alert('Lee');
};
	keyup:释放键盘上的键触发
onkeyup=function(){
    alert('Lee');
};
	3.HTML事件
	load:页面完全加载后在window上触发
window.onload=function(){
    alert('Lee');
};
	change:当文本框内容改变且失去焦点后触发
input.onchange=function(){
    alert('Lee');
};
	submit:当用户点提交按钮在<form>元素上触发
form.onsubmit=function(){
    alert('Lee');
};
	具体部分
	一.事件对象
	一般称作为event对象,它是浏览器通过函数把这个对象作为参数传递过来的。
	二.鼠标事件
	获取按钮信息
	获取屏幕坐标
	修改键
	三.键盘事件
	键码:发生keydown和keyup事件时,event对象的keycode属性中会包含一个代码,与键盘上一个特定的键对应。
	字符编码:发生keypress事件,event对象charCode属相包含键所代表字符的ASCII编码。
	四.事件流
	包括两种模式:冒泡与捕获
	事件冒泡是从里往外逐个触发,事件捕获是从外往里逐个触发。现代浏览器默认都是冒泡模型。
		绑定部分
	一.传统事件绑定问题
	问题一:一个事件处理函数触发两次事件。当两个JS同时执行的时候,后面一个会把前面一个完全覆盖掉。
	解决:
	执行前先判断之前是否有window.onload,创建一个保存器,把之前的window.onload保存起来。
	代码:
window.onload=function(){                     //第一个要执行的事件
    alert('Lee');
};
if (typeof window.onload=='function'){    //判断之前是否有window.onload
    var saved=null;                                    //创建一个保存器
    saved=window.onload;                        //保存之前的window.onload
}
window.onload=function(){                     //最终一个要执行事件
    if(saved)saved();                                 //执行之前一个事件
    alert('Mr.Lee');                                     //执行本事件的代码
};
	问题二:事件切换器在扩展时,之前的会被覆盖。或者解决覆盖问题后,就必须包含同时执行,又出新问题。
	解决:创建一个自定义的事件处理函数
	代码:
function addEvent(obj,type,fn){               //取代传统处理函数
    var saved=null;                                   //保存每次触发的事件处理函数
    if (typeof obj['on'+type]=='function'){  //判断是不是事件
        saved=obj['on'+type];                   //如果有,保存
    }
    obj['on'+type]=function(){
        if(saved)saved();                            //执行上一个
        fn.call(this);                                    //执行函数,传递this
    };
}
addEvent(window,'load',function(){        //执行
    alert('Lee');
});
addEvent(window,'load',function(){        //执行
    alert('Mr.Lee');
});
	二.W3C事件处理函数
	W3C现代事件绑定好处:不需要自定义;可以屏蔽相同的函数;可以设置冒泡和捕获
	三.IE事件处理函数
	IE不支持捕获;添加事件不能屏蔽重复的函数;this指向的是window而不是DOM对象;在传统事件上,IE无法接受到event对象。
	学习这部分内容,其实很多东西都是很有共鸣的。但后面的一些事件流,自定义,(添加超链接)IE与W3C间的比较的知识,好像使得学习困难了些,总结的时候也不知道该如何去写,只能是列举出个大概的标题。这些东西,还是需要在实践中去应用。



目录
相关文章
|
3月前
|
JavaScript 前端开发
|
3月前
|
JavaScript 算法
|
3月前
|
JavaScript
|
16天前
|
JavaScript
事件触发、事件捕获与事件冒泡(js的问题)
事件触发、事件捕获与事件冒泡(js的问题)
10 0
|
18天前
|
JavaScript 前端开发 流计算
JS:oninput和onchange事件的区别
JS:oninput和onchange事件的区别
18 1
|
28天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
15 0
|
1月前
|
JavaScript 前端开发
JS页面加载事件
JS页面加载事件
|
1月前
|
JavaScript
|
1月前
|
JavaScript 前端开发
js阻止浏览器默认事件和防止事件传播事件
js阻止浏览器默认事件和防止事件传播事件
20 3
|
1月前
|
JavaScript
js事件记录(如有更新请留言我去补充)
js事件记录(如有更新请留言我去补充)