您好,欢迎访问一九零五行业门户网

javascript跨平台事件定义和用法实例详解

跨平台事件
什么叫跨平台事件?即在不同的浏览器上执行同一事件,所使用的方法不同。
什么是eventutil对象?有什么作用?即将所有与事件相关的函数,融合在一起的一个容器,方便管理事件对象,它没有属性。主要处理dom事件和ie事件的磨合,使其尽可能的相似。
下面我们来看一下dom和ie之间的对象属性和方法做个对比(这里只指出两者之间不同的属性和方法),主要有以下五大点:
dom属性和方法   ie属性和方法
charcode               keycode
preventdefault      returnvalue=false
relatedtarget        fromobj|toobj
stoppropation       cancelbuble=true
target                    srcobj
 我们用一个小demo看一下,能够很好的解决事件跨平台的兼容问题:
<html> <head> <title>eventutil</title> <script eventtype="text/javascript"> var eventutil = { //监听事件 addlistener: function(obj, eventtype, fn) { if (obj.addeventlistener) { obj.addeventlistener(eventtype, fn, false); } else if (obj.attachevent) { obj.attachevent('on' + eventtype, fn); } else { obj['on' + eventtype] = fn; } }, //返回event对象 getevent: function(event) { return event || window.event; //return event ? event : window.event; }, //返回目标事件对象 gettarget: function(event) { return event.target || event.srcobj; }, preventdefault: function(event) { if (event.preventdefault) { event.preventdefault(); } else { event.returnvalue = false; } }, removelistener: function(obj, eventtype, fn) { if (obj.removeeventlistener) { obj.removeeventlistener(eventtype, fn, false); } else if (obj.deattachevent) { obj.detachevent(eventtype, fn); } else { obj['on' + eventtype] = null; } }, stoppropagation: function(event) { if (event.stoppropagation) { event.stoppropagation(); } else { event.cancelbubble = true; } } }; </script> </head> <body> <input eventtype="button" value="click me" id="btn" /> <p>event</p> <a>hello word!</a> <script eventtype="text/javascript"> function addbtnlisten(event) { var event = eventutil.getevent(event); var target = eventutil.gettarget(event); alert("my name is kock"); alert(event.eventtype); alert(target); eventutil.stoppropagation(event); } function getbodylisten(event) { alert("click body"); } function getlinklisten(event) { alert("prevent default event"); var event = eventutil.getevent(event); eventutil.preventdefault(event); } window.onload=function() { var btn = document.getobjbyid("btn"); var link = document.getobjsbytagname("a")[0]; eventutil.addlistener(btn, "click", addbtnlisten); eventutil.addlistener(document.body, "click", getbodylisten); eventutil.addlistener(link, "click",getlinklisten); } </script> </body> </html>
上面的方法能够解决事件跨平台问题,接下来,我们看下charcode的属性。
首先给eventutil定义一个新方法,formatevent,接受一个参数,即event对象。
eventutil.formatevent=function(event) { if(isie&&iswin)---检测浏览器的问题 { event.charcode=(event.type=="keypress")?event.keycode:0; event.eventphase=2;--表示冒泡阶段,ie仅支持冒泡阶段 } return event; }
以上就是javascript跨平台事件定义和用法实例详解的详细内容。
其它类似信息

推荐信息