javascript事件处理模型实例说明
事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水。当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击、鼠标经过某个特定元素或按下键盘上的某些按键。事件还可能是Web浏览器中发生的事情,比如说某个Web页面加载完成,或者是用户滚动窗口或改变窗口大小。
通过使用JavaScript,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应。
一、添加事件监听
IE:
attachEvent("onclick",function(){...})//添加
detachEvent("onclick",function(){...})//删除
FF:
addEventListener("click",function(){...},false)
//可以跟一个对象添加多个事件监听,跟默认的对象事件不同
removeEventListenner("click",function(){...},false)
二、得到事件对象
IE:
op.onClick=function(){
veroevent=window.event;//作为window的一个属性
}
FF:
op.onClick=function(oevent){
.... //通过传入参数来控制
}
通用:
op.onClick=function(oevent){
if(window.event){
oevent=window.event;
}
}
//即时得到了通用的,但是他们返回对象的属性和方法也不尽一致,但可以使用通过EventUtil来解决!
varEventUtil=newObject;
/**//*
此方法用来给特定对象添加事件,oTarget是指定对象,sEventType是事件类型,如click、keydown等,fnHandler是事件回调函数
*/
EventUtil.addEventHandler=function(oTarget,sEventType,fnHandler){
//firefox情况下
if(oTarget.addEventListener){
oTarget.addEventListener(sEventType,fnHandler,false);
}
//IE下
elseif(oTarget.attachEvent){
oTarget.attachEvent("on"+sEventType,fnHandler);
}
else{
oTarget["on"+sEventType]=fnHandler;
}
};
/*
此方法用来移除特定对象的特定事件,oTarget是指定对象,sEventType是事件类型,如click、keydown等,fnHandler是事件回调函数
*/
EventUtil.removeEventHandler=function(oTarget,sEventType,fnHandler){
if(oTarget.removeEventListener){
oTarget.removeEventListener(sEventType,fnHandler,false);
}elseif(oTarget.detachEvent){
oTarget.detachEvent("on"+sEventType,fnHandler);
}else{
oTarget["on"+sEventType]=null;
}
};
/*
格式化事件,因为IE和其他浏览器下获取事件的方式不同并且事件的属性也不尽相同,通过此方法提供一个一致的事件
*/
EventUtil.formatEvent=function(oEvent){
//isIE和isWin引用到一个js文件,判断浏览器和操作系统类型
if(isIE&&isWin){
oEvent.charCode=(oEvent.type=="keypress")?oEvent.keyCode:0;
//IE只支持冒泡,不支持捕获
oEvent.eventPhase=2;
oEvent.isChar=(oEvent.charCode>0);
oEvent.pageX=oEvent.clientX+document.body.scrollLeft;
oEvent.pageY=oEvent.clientY+document.body.scrollTop;
//阻止事件的默认行为
oEvent.preventDefault=function(){
this.returnValue=false;
};
//将toElement,fromElement转化为标准的relatedTarget
if(oEvent.type=="mouseout"){
oEvent.relatedTarget=oEvent.toElement;
}elseif(oEvent.type=="mouseover"){
oEvent.relatedTarget=oEvent.fromElement;
}
//取消冒泡
oEvent.stopPropagation=function(){
this.cancelBubble=true;
};
oEvent.target=oEvent.srcElement;
//添加事件发生时间属性,IE没有
oEvent.time=(newDate).getTime();
}
returnoEvent;
};
EventUtil.getEvent=function(){
if(window.event){
//格式化IE的事件
returnthis.formatEvent(window.event);
}else{
returnEventUtil.getEvent.caller.arguments[0];
}
};
/*
*附带上一个判断浏览器和系统类型的js文件,通过引入一些名字显而易见的全局变量作为判断的结果,使用时需要小心变量名称冲突:
*/
varsUserAgent=navigator.userAgent;
varfAppVersion=parseFloat(navigator.appVersion);
functioncompareVersions(sVersion1,sVersion2){
varaVersion1=sVersion1.split(".");
varaVersion2=sVersion2.split(".");
if(aVersion1.length>aVersion2.length){
for(vari=0;i<aVersion1.length-aVersion2.length;i++){
aVersion2.push("0");
}
}elseif(aVersion1.length<aVersion2.length){
for(vari=0;i<aVersion2.length-aVersion1.length;i++){
aVersion1.push("0");
}
}
for(vari=0;i<aVersion1.length;i++){
if(aVersion1[i]<aVersion2[i]){
return-1;
}elseif(aVersion1[i]>aVersion2[i]){
return1;
}
}
return0;
}
varisOpera=sUserAgent.indexOf("Opera")>-1;
varisMinOpera4=isMinOpera5=isMinOpera6=isMinOpera7=isMinOpera7_5=false;
if(isOpera){
varfOperaVersion;
if(navigator.appName=="Opera"){
fOperaVersion=fAppVersion;
}else{
varreOperaVersion=newRegExp("Opera(//d+//.//d+)");
reOperaVersion.test(sUserAgent);
fOperaVersion=parseFloat(RegExp["$1"]);
}
isMinOpera4=fOperaVersion>=4;
isMinOpera5=fOperaVersion>=5;
isMinOpera6=fOperaVersion>=6;
isMinOpera7=fOperaVersion>=7;
isMinOpera7_5=fOperaVersion>=7.5;
}
varisKHTML=sUserAgent.indexOf("KHTML")>-1
||sUserAgent.indexOf("Konqueror")>-1
||sUserAgent.indexOf("AppleWebKit")>-1;
varisMinSafari1=isMinSafari1_2=false;
varisMinKonq2_2=isMinKonq3=isMinKonq3_1=isMinKonq3_2=false;
if(isKHTML){
isSafari=sUserAgent.indexOf("AppleWebKit")>-1;
isKonq=sUserAgent.indexOf("Konqueror")>-1;
if(isSafari){
varreAppleWebKit=newRegExp("AppleWebKit///(//d+(?://.//d*)?)");
reAppleWebKit.test(sUserAgent);
varfAppleWebKitVersion=parseFloat(RegExp["$1"]);
isMinSafari1=fAppleWebKitVersion>=85;
isMinSafari1_2=fAppleWebKitVersion>=124;
}elseif(isKonq){
varreKonq=newRegExp("Konqueror///(//d+(?://.//d+(?://.//d)?)?)");
reKonq.test(sUserAgent);
isMinKonq2_2=compareVersions(RegExp["$1"],"2.2")>=0;
isMinKonq3=compareVersions(RegExp["$1"],"3.0")>=0;
isMinKonq3_1=compareVersions(RegExp["$1"],"3.1")>=0;
isMinKonq3_2=compareVersions(RegExp["$1"],"3.2")>=0;
}
}
varisIE=sUserAgent.indexOf("compatible")>-1
&&sUserAgent.indexOf("MSIE")>-1
&&!isOpera;
varisMinIE4=isMinIE5=isMinIE5_5=isMinIE6=false;
if(isIE){
varreIE=newRegExp("MSIE(//d+//.//d+);");
reIE.test(sUserAgent);
varfIEVersion=parseFloat(RegExp["$1"]);
isMinIE4=fIEVersion>=4;
isMinIE5=fIEVersion>=5;
isMinIE5_5=fIEVersion>=5.5;
isMinIE6=fIEVersion>=6.0;
}
varisMoz=sUserAgent.indexOf("Gecko")>-1
&&!isKHTML;
varisMinMoz1=sMinMoz1_4=isMinMoz1_5=false;
if(isMoz){
varreMoz=newRegExp("rv:(//d+//.//d+(?://.//d+)?)");
reMoz.test(sUserAgent);
isMinMoz1=compareVersions(RegExp["$1"],"1.0")>=0;
isMinMoz1_4=compareVersions(RegExp["$1"],"1.4")>=0;
isMinMoz1_5=compareVersions(RegExp["$1"],"1.5")>=0;
}
varisNS4=!isIE&&!isOpera&&!isMoz&&!isKHTML
&&(sUserAgent.indexOf("Mozilla")==0)
&&(navigator.appName=="Netscape")
&&(fAppVersion>=4.0&&fAppVersion<5.0);
varisMinNS4=isMinNS4_5=isMinNS4_7=isMinNS4_8=false;
if(isNS4){
isMinNS4=true;
isMinNS4_5=fAppVersion>=4.5;
isMinNS4_7=fAppVersion>=4.7;
isMinNS4_8=fAppVersion>=4.8;
}
varisWin=(navigator.platform=="Win32")||(navigator.platform=="Windows");
varisMac=(navigator.platform=="Mac68K")||(navigator.platform=="MacPPC")
||(navigator.platform=="Macintosh");
varisUnix=(navigator.platform=="X11")&&!isWin&&!isMac;
varisWin95=isWin98=isWinNT4=isWin2K=isWinME=isWinXP=false;
varisMac68K=isMacPPC=false;
varisSunOS=isMinSunOS4=isMinSunOS5=isMinSunOS5_5=false;
if(isWin){
isWin95=sUserAgent.indexOf("Win95")>-1
||sUserAgent.indexOf("Windows95")>-1;
isWin98=sUserAgent.indexOf("Win98")>-1
||sUserAgent.indexOf("Windows98")>-1;
isWinME=sUserAgent.indexOf("Win9x4.90")>-1
||sUserAgent.indexOf("WindowsME")>-1;
isWin2K=sUserAgent.indexOf("WindowsNT5.0")>-1
||sUserAgent.indexOf("Windows2000")>-1;
isWinXP=sUserAgent.indexOf("WindowsNT5.1")>-1
||sUserAgent.indexOf("WindowsXP")>-1;
isWinNT4=sUserAgent.indexOf("WinNT")>-1
||sUserAgent.indexOf("WindowsNT")>-1
||sUserAgent.indexOf("WinNT4.0")>-1
||sUserAgent.indexOf("WindowsNT4.0")>-1
&&(!isWinME&&!isWin2K&&!isWinXP);
}
if(isMac){
isMac68K=sUserAgent.indexOf("Mac_68000")>-1
||sUserAgent.indexOf("68K")>-1;
isMacPPC=sUserAgent.indexOf("Mac_PowerPC")>-1
||sUserAgent.indexOf("PPC")>-1;
}
if(isUnix){
isSunOS=sUserAgent.indexOf("SunOS")>-1;
if(isSunOS){
varreSunOS=newRegExp("SunOS(//d+//.//d+(?://.//d+)?)");
reSunOS.test(sUserAgent);
isMinSunOS4=compareVersions(RegExp["$1"],"4.0")>=0;
isMinSunOS5=compareVersions(RegExp["$1"],"5.0")>=0;
isMinSunOS5_5=compareVersions(RegExp["$1"],"5.5")>=0;
}
}
以上就是js事件处理,希望能给大家一个参考,也希望大家多多支持毛票票。