javascript 跨浏览器的一些小技巧

系统 3063 0

    用网页调整格式实在是太复杂了,凑合看看吧。。。。。

  1.   事件处理分为两种,一种为冒泡型事件,另一种为捕获型事件
     
    冒泡型事件 :是从特定目标到最不特定的目标
     
    捕获型事件 :是从最不特定的对象开始触发,一直到最精确的对象。
     
     DOM
    标准同时支持两种事件,并且捕获型事件先发生。
     window-->document-->body-->div-->div-->body-->document-->window
     
     
    比较特殊的,在 DOM 事件模型中,文本节点也会触发事件,而 IE 中是不会的。
     window-->document-->body-->div-->text-->text-->div-->body-->document-->window
     
     
  2. IE DOM 在事件及事件处理中有很多不一样的。
  •   对于加载监听和移除监听的语法
     
    IE 中使用
      [Object].attachEvent("name_of_event_handler", fnHandler);
      [Object].detachEvent("name_of_event_handler", fnHandler);
     
    两个参数:要分配的事件处理函数的名字 事件处理函数
      [Object].attachEvent("onclick", fnHandler);
      
    [Object].onclick = fnHandler; 的作用是一样的。
      
     
    DOM 中使用
      [Obejct].addEventListener("name_of_event", fnHandler, bCapture);
      [Obejct].removeEventListener("name_of_event", fnHandler, bCapture);
     
    三个参数: 1 :事件名称。 2 :事件处理函数。 3 :用于冒泡阶段( false )或者用于捕获阶段( true )。
      [Obejct].addEventListener("click", fnHandler, false);
      
    [Obejct].onclick = fnHandler; 的作用是一样的。
      
     
  • 对于获取目标的方法
     
    IE
      var oTarget = oEvent.srcElement;
     
    DOM
      var oTarget = oEvent.target;
      
      
  • 对于获取字符代码

    在 IE

      如果按键代表一个字符(非 Shift Ctrl Alt 等),则 keyCode 将返回字符的代码,即 Unicode 值。

DOM
             
获得字符代码用 charCode 

var iCharCode = oEvent.charCode;
             
获得字符使用   

 var sChar = String.fromCharCode(oEvent.charCode);
             
如果不确定按键是否包含字符,则使用 isChar 来判断
   if(oEvent.isChar){
    var iCharCode = oEvent.charCode;
   }
 
 

  • 阻止事件的默认行为 ( 比如阻止鼠标右键等 )
     
    IE
      oEvent.returnValue = false;
     
    DOM
      oEvent.preventDefault();
     
     
  • 停止事件冒泡
     
    IE
      oEvent.cancelBubble = true;
     
    DOM
      oEvent.stopPropagation();

    IE DOM 在事件及事件处理中有很多不一样的。

IE Event 事件统一成 DOM 的形式,创建 formatEvent 方法。建立 EventUtil
 
 

    EventUtil.formatEvent = function (oEvent){
  if(isIE){
   oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
   oEvent.eventPhase = 2; //代表冒泡阶段,IE仅支持冒泡阶段
   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;
   }
   if(oEvent.type == "mouseout"){
    oEvent.relatedTarget = oEvent.toElement;
   }else if(oEvent.type == "mouseover"){
    oEvent.relatedTarget = oEvent.fromElement;
   }
   oEvent.stopPropagation = function (){
    this.cancelBubble = true;
   }
   oEvent.target = oEvent.srcElement;
   oEvent.time = (new Date).getTime();
  }
  return oEvent;
 }

  

 
 IE

DOM event 获取方法也不大一样。特别说明的是函数的 caller 属性。每个函数都有 caller 属性,指向调用它的方法的引用。即, funcA() 调用 funcB(),funcB.caller 就等于 funcA
 

    EventUtil.getEvent = function(){
  if(window.event){
   return this.formatEvent(window.event);
  }else{
   return EventUtil.getEvent.caller.arguments[0];//event对象总是事件处理函数的第一个参数。
  }
 }

  

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

javascript 跨浏览器的一些小技巧


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论