javascript — 事宜
事宜是js和用户操纵交互的桥梁,
JavaScript 有三种事宜模子:内联模子、剧本模子和 DOM2 模子
内联模子
这类模子是最传统接单的一种处置惩罚事宜的要领。在内联模子中,事宜处置惩罚函数是 HTML 标签的一个属性,用于处置惩罚指定事宜。虽然内联在初期运用较多,但它是和 HTML 混写的,并没有与 HTML 星散。
//在 HTML 中把事宜处置惩罚函数作为属性实行 JS 代码
<input type="button" value="按钮" onclick="alert('Lee');" /> //注重单双引号
剧本模子
因为内联模子违反了 HTML 与 JavaScript 代码条理星散的准绳。为了处理这个题目,我
们能够在 JavaScript 中处置惩罚事宜。这类处置惩罚方式就是剧本模子。
var input = document.getElementsByTagName('input')[0]; //获得 input 对象
input.onclick = function () { //匿名函数实行
alert('Lee');
};
直接吸收 event 对象,是 W3C 的做法,IE 不支撑,IE 本身定义了一个 event 对象,直接在 window.event 猎取即可。
div.onclick = function (evt) {
var e = evt || window.event; //完成跨浏览器兼容猎取 event 对象
if(evt){
//w3c代码
} else if (window.event) {
//ie代码
}
};
DOM2 级
模子定义了两个要领,用于增加事宜和删除事宜处置惩罚递次的操纵:
addEventListener()和 removeEventListener()一切 DOM 节点中都包括这两个要领,而且它们都接收 3 个参数;事宜名、函数、冒泡或捕捉的布尔值(true 示意捕捉,false 示意冒泡)。
div.addEventListener('click', function () {
alert('Lee');
}, false);
div.addEventListener('click', function () {
alert('Mr.Lee');
}, false);
捕捉与冒泡
事宜流分为2种:
(1) 冒泡型事宜:事宜根据从最特定的事宜目的到最不特定的事宜目的(document对象)的递次触发
(2) 捕捉型事宜(event capturing):事宜从最不准确的对象(document 对象)最先触发,然后到最准确(也能够在窗口级别捕捉事宜,不过必须由开辟人员迥殊指定)
支撑W3C规范的浏览器在增加事宜时用addEventListener(event,fn,useCapture)要领,基中第3个参数useCapture是一个Boolean值,用来设置事宜是在事宜捕捉时实行,照样事宜冒泡时实行。而不兼容W3C的浏览器(IE)用attachEvent()要领,此要领没有相干设置,不过IE的事宜模子默许是在事宜冒泡时实行的,也就是在useCapture即是false的时刻实行,所以把在处置惩罚事宜时把useCapture设置为false是比较平安,也完成兼容浏览器的结果。
js事宜捕捉与冒泡原理图
DOM事宜流:同时支撑两种事宜模子:捕捉型事宜和冒泡型事宜,然则,捕捉型事宜先发作。两种事宜流会触及DOM中的一切对象,从document对象最先,也在document对象完毕。
W3c明智的在这场争斗中挑选了一个择中的计划。任何发作在w3c事宜模子中的事宜,首是进入捕捉阶段,直到到达目的元素,再进入冒泡阶段
你能够挑选是在捕捉阶段照样冒泡阶段绑定事宜处置惩罚函数,这是经由过程addEventListener()要领完成的,假如这个函数的末了一个参数是true,则在捕捉阶段绑定函数,反之false(默许),在冒泡阶段绑定函数。
固然IE作为前端递次员的口诛笔伐者天然如上面所说只支撑冒泡阶段实行, 但是令人高兴的是从IE9 微软拥抱 w3c 跟着谷歌的兴起 chrome已站到浏览器的半壁河山, IE678 逐渐走出汗青, 无疑给是前端开辟的福音