zoukankan      html  css  js  c++  java
  • javascript事件

    事件,本来挺简单的,但是在javascript确是个麻烦的事情。最重要的原因是兼容性。首先我们看看javascript事件有哪些兼容性问题,以及如何处理这些兼容性。

    事件的兼容性一览

    • addEventListener(type, eventHandle, useCapture)、attachEvent(“on”+ type, eventHandler) // w3c

          removeEventListener(type, eventHandle, useCapture) 、detachEvent(“on”+ type, eventHandle) // IE

    tip: addEventListener中第三个参数为true时,捕获时触发,false时候为冒泡时触发。

    function addEvent(elem, type, eventHandle, useBubble){
    	if(elem.addEventListener){
    		elem.addEventListener(type, eventHandle, useBubble);
    	}else if(elem.attachEvent){
    		elem.attachEvent(“on”+type, eventHandle);
    	}
    }
    function removeEvent(elem, type, eventHandle, useCapture){
    	if(elem.removeEventListener){
    		elem.removeEventListener(type, eventHandle, useCapture);
    	}else if(elem.detachEvent){
    		elem.detachEvent(type, eventHandle);
    	}
    }
    • target、srcElement

    IE9以下不支持event.target

    function filter(event){
    	if(!event.target){
    		event.target = event.srcElement || document;
    	}
    }
     
    • keyCode、which、charCode的兼容性

    在IE下:
    >> 支持keyCode
    >> 不支持which和charCode,二者值为 undefined
    在Firefox下:
    >> 支持keyCode,除功能键外,其他键值始终为 0
    >> 支持which和charCode,二者的值相同
    在Opera下:
    >> 支持keyCode和which,二者的值相同
    >> 不支持charCode,值为 undefined

    兼容处理:

    function filter(event){
            if(event.which == null){
    
                    event.charCode != null ? event.charCode : event.keyCode;
    
            }
            return event.which;
    
    }
     
    • pageX、pageY

    image

    兼容处理:

    function filter(event){
    	var eventDoc = event.target.ownerDocument || document;
    	var doc = eventDoc.documentElement;
    	bar body = eventDoc.body;
    	event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
    	event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop) + (doc && doc.clientTop || body && body.clientTop);
    }
     
    • relatedTarget、fromElement、toElement相关元素

    DOM通过event对象的releatedTarget属性获取相关元素信息。这个属性只针对mouseover/mouseenter和mouseout才包含值。

    IE不支持releatedTarget,但是支持fromElement或者toElement。

    function filter(event){
    	if(!event.relatedTarget && event.fromElement){
    		event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
    	}
    }
  • 相关阅读:
    linux进程间通信之消息队列
    本地安装discuz x2.5(论坛站)程序
    缩小IO/CPU瓶颈:linux平台加速编译速度的几种方法
    php mcrypt
    Nginx工作原理和优化、漏洞。
    Linux下两种TCP网络服务器实现方式:循环服务&并发服务
    version `GLIBC_2.14' not found 解决方法.
    Flex Ant自动构建
    函数传指针和传引用
    JEECG 列表行编辑模式下实现文本的xheditor富文本框编辑器
  • 原文地址:https://www.cnblogs.com/pfzeng/p/5266480.html
Copyright © 2011-2022 走看看