事件处理:
1、HTML事件处理程序
例子:
<input type="button" id="btn" value="click me" onclick="alert('Hello!');">
或者:
<input type="button" id="btn" value="click me" onclick="show()"> <script> function show(){ alert("Hello world!"); } </script>
缺点:HTML与JavaScript代码紧密耦合在一起,不方便修改。
2、DOM零级处理程序
例子:
<input type="button" id="btn" value="click me"> <script> var btn=document.getElementById("btn"); btn.onclick=function(){ alert("...."); } </script>
这段代码的作用是添加点击事件,若要取消点击事件,只需"btn.onclick=null;"即可。
3、DOM二级事件处理程序
定义了两个方法:addEventListener()和removeEventListener(),分别是用于指定和删除事件处理程序的操作。
两种方法都有三个参数:
(1)要处理的事件名;
(2)事件处理程序的函数;
(3)布尔值:true(在捕获事件中调用);false(在冒泡事件中调用)。
例子:
var btn=document.getElementById("btn"); btn.addEventListener('click',function(){alert('Hello');},false);
要删除只能用removeEventListener(),而不能用“....=null”。
4、IE事件处理程序
attachEvent()和detachEvent(),分别是添加和删除事件。
两个参数:
(1)要处理的事件名;
(2)事件处理程序的函数。
不使用第三个参数的原因是:IE8以及更早的浏览器版本只支持事件冒泡。
用法:
btn.attachEvent('onclick',function(){.....});
注意是"onclick" "onmouseover" 还是用"click" "mouseover"等,有没有加"on"。
5、跨浏览器的事件处理程序
做法是:所有的事件处理程序封装在一个对象内。
如下代码:
/* * @Author: 陈陈陈 * @Date: 2017-09-03 10:18:07 * @Last Modified by: 陈陈陈 * @Last Modified time: 2017-09-03 12:19:34 */ var eventUtil{ /*添加事件处理程序 */ addHandler:function(element,type,handler){//参数表元素、事件类型、函数 if(element.addEventListener){//DOM 2级事件处理程序 element.addEventListener(type,handler,false);//false表冒泡事件调用;true表捕获事件调用 }else if(element.attachEvent){//IE事件处理程序 element.attachEvent('on'+type,handler);//没有第三个参数的原因是:IE8及更早的浏览器版本只支持事件冒泡 }else{//DOM 0级事件处理程序 element['on'+type]=handler; } }, /*删除事件处理程序 */ removeHandler:function(element,type,handler){//删除事件处理程序,参数表元素、事件类型、函数 if(element.removeEventListener){//DOM 2级事件处理程序 element.removeEventListener(type,handler,false);//false表冒泡事件调用;true表捕获事件调用 }else if(element.detachEvent){//IE事件处理程序 element.detachEvent('on'+type,handler);//没有第三个参数的原因是:IE8及更早的浏览器版本只支持事件冒泡 }else{//DOM 0级事件处理程序 element['on'+type]=null; } }, /*以下一些方法是关于事件对象的获取 改善浏览器的兼容性,将DOM事件对象和IE事件对象合并在一起 1、DOM的事件对象: (1)type:事件类型 (2)target:事件目标 (3)stopPropagation()方法:阻止事件冒泡 (4)preventDefault()方法:阻止事件的默认行为 2、IE中的事件对象: (1)type:事件类型 (2)srcElement:事件目标 (3)cancelBubble属性:阻止事件冒泡 true表示阻止冒泡,false表示不阻止 (4)returnValue属性:阻止事件的默认行为 */ getEvent:function(event){ return event?event:window.event; }, getTarget:function(event){ return target || srcElement; }, stopPro:function(event){ if(event.stopPropagation){ event.stopPropagation(); }else{ event.cancelBubble=true; } }, preventDef:function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue=false; } }, }