JavaScript和HTML之间的交互是通过事件来实现的。
JavaScript事件模型主要有三种:DMO0级事件处理程序(原始事件模型)、DMO2级事件处理程序、IE事件处理程序。
1.DMO0级事件处理程序(原始事件模型)
特点:
①简单;
②具有跨浏览器的优势;
③this:当前元素(使用DOM0级方法指定的事件处理程序被认为是元素的方法,事件处理程序是在元素的作用域中运行);
④一个DOM对象只能注册一个类型的事件,如果注册了两个,则会发生覆盖,只执行后一个事件;
代码:
①添加事件
var btn = document.getElementById("myBtn");btn.onclick = function(){ console.log(this.id);//"myBtn"}复制代码
②删除事件
var btn = document.getElementById("myBtn");btn.onclick = null;复制代码
2.DMO2级事件处理程序
特点:
①一个DOM对象可以注册多个事件处理程序,会依次触发;
②addEventListener()、removeEventListener()均接受三个参数:要处理的事件名、作为事件处理程序的函数、一个布尔值;而布尔值若为true,则代表在捕获阶段调用事件处理程序,为false,则代表在冒泡阶段调用事件处理程序。
代码:
①添加事件
var btn = document.getElementById("myBtn");btn.addEventListener("click",function(){ console.log(this.id);//"myBtn"},false)btn.addEventListener("click",function(){ console.log('Hello!');//"myBtn"},false)复制代码
②删除事件
var btn = document.getElementById("myBtn");btn.removeEventListener("click",function(){ console.log(this.id);//没用。。。。},false)复制代码
正确的:
var btn = document.getElementById("myBtn");var hander = function(){console.log(this.id);}btn.addEventListener("click",hander,false);btn.removeEventListener("click",hander,false);复制代码
3.IE事件处理程序
特点:
①一个对象可以注册多个事件处理程序,但并非依次触发,而是相反顺序被触发(与DOM方法不同);
②this:window对象(与DOM0级方法中有所区别);
代码:
①添加事件
var btn = document.getElementById("myBtn");btn.attachEvent("onclick",function(){//注意第一个参数为 onclick console.log('Click!');});btn.attachEvent("onclick",function(){//注意第一个参数为 onclick console.log('Hello!');});//先 "Hello!" 再"Click!"复制代码