为了账号安全,请及时绑定邮箱和手机立即绑定

课程记录整理


<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <title>HTML/DOM0级/DOM2级事件处理程序</title>

</head>

<body>

<div id="Box">

    <input type="button" value="html事件1" id="btn" onclick="alert('我是html事件1即直接插入')"/>

    <input type="button" value="html事件2" id="btn1" onclick="htm()"/>

    <input type="button" value="DOM0级事件" id="btn2" />

    <input type="button" value="DOM2级事件" id="btn3" />

    <a href="http://imooc.com" id="go">验证默认跳转行为</a>

</div>

<script type="text/javascript">

    function htm(){

        alert("我是html事件2即封装函数。也是被DOM2级事件调用的函数");

        event.stopPropagation();//阻止冒泡事件,即阻止父元素的showBox事件触发

    }//html事件2,此事件更改要改两处,不方便后续优化

    function showBox(){

        alert("这个函数用于验证冒泡事件")

    }

    function stopgoto(event){//接收event事件

  //      event.stopPropagation();//阻止冒泡

  //      event.preventDefault();//阻止默认行为,使a的默认跳转行为取消

    }

    var dom0=document.getElementById("btn2");

    var dom2=document.getElementById("btn3");

    var Box=document.getElementById('Box');//验证冒泡事件

    var go=document.getElementById("go");

    dom0.onclick=function(){

        alert("我是DOM0级事件函数")

    }

    //dom0.onclick=null;//清除DOM0级事件


 /*  dom2.addEventListener("click",htm,false);//此处为添加监听事件。所有事件都要去掉ON,例click;调用函数htm;冒泡事件false.DOM2级事件可调用需要的函数

    dom2.addEventListener("click",function(){

        alert("DOM2级事件可添加多个事件,并获取想要的属性,this可引用被触发的元素,即this表示被触发的那个函数。见下面示例");

    },false);//this十分重要

    dom2.addEventListener("click",function(){

        alert(this.value);

    },false);//HTML事件没法添加多个事件,DOM0级可以

    //dom2.removeEventListener("click",htm,false);//删除DOM2运用addEventListener() 所添加的事件

    //dom2级事件处理程序在IE中无效,所以要设置兼容性,此时要将DOM2级事件注释掉。以下以btn3为例进行IE方法演示

 */

/*    dom2.attachEvent("onclick",htm);//此时btn3z在IE中可用。此处事件要加上ON,与DOM有所区别。无false是因为IE8及更早的浏览器只支持冒泡事件(false).

   // dom2.detachEvent("onclick",htm);//清除 dom2.attachEvent("onclick",htm);事件

*/

    //以下设置函数,使btn3在多种浏览器中均可使用即跨浏览器事件处理

    var eventUtil={

        //添加句柄.如何给一个元素添加事件

        addHandler:function(element,type,handler){//type类型无ON,element给谁添加,type添加类型,handler触发的操作.target用于获取事件目标

            if(element.addEventListener){//判断DOM2级

                element.addEventListener(type,handler,false);

            }

            else if(element.attachEvent){//判断IE

                element.attachEvent(type,handler)

            }

            else{//判断DOM0级,低级和传统浏览器,on为字符串,变量和字符串之间不可用.链接


               element['on'+type]=handler;//element[onclick] ===element.onclick

            }

        },

        removeHandler:function(element,type,handler){//删除句柄。如何给一个元素删除事件

            if(element.removeEventListener){

                element.removeEventListener(type,handler,false);

            }

            else if(element.detachEvent){

                element.detachEvent('on'+type,handler);

            }

            else{

                element['on'+type]=null;

            }

        },

        //对以上函数封装判断事件对象DOM与IE不同

        getEvent:function(event){//获取事件。如何获取兼容所有浏览器的事件对象

            return event?event:window.event;

        },

        getType:function(event){//获取事件类型

        return event.type;

    },

        getElement:function(event){//如何获取事件来自哪个元素

            return event.target || event.srcElement;

        },

        preventDefault:function(event){//判断事件对象为DOM还是IE,选择阻止默认行为的方法

          if(event.preventDefault){//判断DOM事件对象,执行阻止默认行为方法

              event.preventDefault();

          }  else{

              event.returnValue=false;//判断IE事件对象

          }

        },

        stopPropagation:function(event){//判断事件对象为DOM还是IE,选择阻止事件冒泡的方法

        if(event.stopPropagation){//判断DOM事件对象

            event.stopPropagation() 

        }else{

            event.cancelBubble=true;//判断为IE事件对象

        }

    }

}

//通过选择判断可让其跨浏览器兼容.eventUtil这部分内容可单独放置在一个event.js文件,再调用<script src="event.js"/>

    eventUtil.addHandler(dom2,'click',htm);//调用

    eventUtil.addHandler(Box,'click',showBox);//调用id为Box

    eventUtil.addHandler(go,'click',stopgoto);//调用a的页面跳转事件,将事件go绑定

 //   eventUtil.removeHandler(dom2,'click',htm);//删除调用

</script>//此部分可放置于单独的JS文件调用

</body>

</html>


正在回答

0 回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信