亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js中最容易被忽視的事件問題大總結

2019-11-20 10:03:22
字體:
來源:轉載
供稿:網友

什么叫跨平臺事件?即在不同的瀏覽器上執行同一事件,所使用的方法不同。

什么是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;}

二:關于冒泡中的target和currentTarget

target在事件流的目標階段;currentTarget在事件流的捕獲,目標及冒泡階段。只有當事件流處在目標階段的時候,兩個的指向才是一樣的, 而當處于捕獲和冒泡階段的時候,target指向被單擊的對象而currentTarget指向當前事件的父級。

<div id="outer" style="background:#099">       <p>我是目標div</p>  ----點擊這部分,輸出:e.target.tagName : P || e.currentTarget.tagName : DIV      <p id="inner" style="background:#9C0">我是目標p</p> ----點擊這部分,輸出:e.target.tagName : P || e.currentTarget.tagName : DIV      <br> ----點擊這部分,輸出:e.target.tagName : DIV || e.currentTarget.tagName : DIV</div>//看下第二個變列:<div id="outer" style="background:#099">       <div>我是目標div</div>  ----點擊這部分,輸出:e.target.tagName : DIV || e.currentTarget.tagName : DIV      <p id="inner" style="background:#9C0">我是目標p</p> ----點擊這部分,輸出:e.target.tagName : P || e.currentTarget.tagName : DIV      <br> ----點擊這部分,輸出:e.target.tagName : DIV || e.currentTarget.tagName : DIV</div>
function getObj(id){   return document.getElementById(id);   } function addEvent(obj, event, fn){   if(window.attachEvent)  {    obj.attachEvent("on" + event, fn);   }  else if(window.addEventListener)  {     obj.addEventListener(event, fn, false);   } } function test(e){   alert("e.target.tagName : " + e.target.tagName + "/n e.currentTarget.tagName : " + e.currentTarget.tagName);  }    var outer = getObj("outer");    var inner = getObj("inner");    //addEvent(inner, "click", test);    addEvent(outer, "click", test);

三:IE和DOM區別

DOM IE
獲取目標 event.target event.srcElement
獲取字符代碼 event.charCode event.keyCode
阻止默認行為 event.prevetDefault() event.returnvalue=false
冒泡 event.stopPropagation() event.cancelBubble=true

 關于阻止默認行為,比如,當用戶右擊鼠標時,如果你不想菜單彈出,則可以使用阻止默認行為:

document.body.oncontextmenu=function(event){  if(isIE)  {     var oEvent=window.event;     oEvent.returnValue=false; //也可以直接是return false;阻止默認行為  }  else  {    oEvent.preventDefault();  }}

四:鼠標事件

<p>use your mouse to click and double click the red square</p><div style="width:100px;height:100px;background:red"    onmouseover="handleEvent(event)"    onmouseout="handleEvent(event)"    onmousedown="handleEvent(event)"     onmouseup="handleEvent(event)"      onclick="handleEvent(event)"     ondblclick="handleEvent(event)" id="div1"   >       </div><p><textarea id="txt1" rows="5" cols="45"></textarea></p><!--檢測鍵盤事件--><p><input type="text" id="textbox"       onkeydown="handle(event)"      onkeypress="handle(event)"      onkeyup="handle(event)"     ></p><p><textarea id="txt2" rows="10" cols="45"></textarea></p>

js文件如下:

function handleEvent(event){  var oText=document.getElementById('txt1');  oText.value+= "/n"+event.type;  oText.value+= "/n target is "+(event.srcElement||event.target).id;  oText.value+="/n at ("+event.clientX+","+event.clientY+")in the client";  oText.value+="/n at ("+event.screenX+","+event.screenY+")in the client";  oText.value+="/n button down is"+event.button;  var arrKeys=[];  oText.value+="/n relatedTarget is"+event.relatedTarget.tagName;  //event.relatedTarget.tagName可以判斷鼠標的來源和出處}function handle(event){  var oText2=document.getElementById('txt2');  oText2.value+="/n"+event.type;  var arrKeys=[]; if(event.shiftKey){arrKeys.push("Shift");} if(event.ctrlKey){arrKeys.push("Ctrl");} if(event.altKey){arrKeys.push("Alt");}  oText2.value+="/n keydown is "+arrKeys;}

以上這篇js中最容易被忽視的事件問題大總結就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄网动漫久久久| 久久免费视频网站| 国产日韩在线亚洲字幕中文| 中文字幕欧美日韩精品| 91亚洲va在线va天堂va国| 日韩国产精品一区| 91精品国产91久久久久久| 午夜免费久久久久| 久久人人爽人人爽人人片av高请| 久久久久久久国产精品视频| 亚洲美女www午夜| 日本免费一区二区三区视频观看| 91中文在线视频| 日韩精品在线视频| 欧美精品videosex牲欧美| 亚洲精品国产拍免费91在线| 亚洲男人天堂网站| 8050国产精品久久久久久| 色妞色视频一区二区三区四区| 国产精自产拍久久久久久| 欧美成人国产va精品日本一级| 青青草原成人在线视频| 国产精品男女猛烈高潮激情| 国产一区二区美女视频| 日本在线观看天堂男亚洲| 92看片淫黄大片欧美看国产片| 日韩精品亚洲元码| 精品少妇一区二区30p| 欧美xxxx做受欧美| 国产成人免费av| 亚洲精品大尺度| 国产精品99久久久久久www| 精品亚洲永久免费精品| 国产精品免费福利| 在线视频一区二区| 欧美高清不卡在线| 国产日韩在线看片| 91精品国产高清久久久久久| 久久91精品国产| 一区二区三区高清国产| 欧美日韩中国免费专区在线看| 91影院在线免费观看视频| 91久久精品视频| 欧美高清视频在线播放| 国产精品久久久久国产a级| 亚洲成人网av| 久久99精品国产99久久6尤物| 中文字幕av一区中文字幕天堂| 亚洲国产欧美在线成人app| 国产精品电影观看| 狠狠做深爱婷婷久久综合一区| 亚洲欧洲自拍偷拍| 欧美福利在线观看| 色综合久久精品亚洲国产| 日本不卡视频在线播放| 欧美日韩另类字幕中文| 夜夜躁日日躁狠狠久久88av| 精品视频www| 日韩性生活视频| 久久躁日日躁aaaaxxxx| 国产精品美女无圣光视频| 中文字幕久久久| 揄拍成人国产精品视频| 成人a级免费视频| 久久久精品国产一区二区| 91中文在线视频| 国产精品观看在线亚洲人成网| 成人高h视频在线| 中文字幕在线精品| 亚洲午夜性刺激影院| 亚洲第一男人天堂| 久久视频在线直播| 欧美国产日韩一区二区三区| 欧美高清视频在线观看| 久久综合国产精品台湾中文娱乐网| 97色伦亚洲国产| 日本中文字幕久久看| 亚洲成人黄色在线观看| 91欧美精品午夜性色福利在线| 欧美美女18p| 国产日韩换脸av一区在线观看| 国产不卡视频在线| 日韩暖暖在线视频| 日韩视频在线观看免费| 狠狠躁夜夜躁人人爽超碰91| 日韩av在线免费观看一区| 欧美亚洲国产精品| 综合久久五月天| 欧美视频在线观看免费| 国产精品对白刺激| 色无极亚洲影院| 91青草视频久久| 亚洲精品www久久久久久广东| 国产一区二区动漫| 91sao在线观看国产| 国产精品一二三视频| 国产日韩欧美夫妻视频在线观看| 日本久久久久久| 日韩美女av在线| 亚洲精品网站在线播放gif| 欧美电影在线观看网站| 国产视频丨精品|在线观看| 亚洲第一区在线| 色综合影院在线| 一本大道香蕉久在线播放29| 高清欧美性猛交| 欧美极品在线视频| 久久精品一本久久99精品| 欧美韩国理论所午夜片917电影| 91精品国产91久久久久久不卡| 色综合久久悠悠| 岛国av午夜精品| 波霸ol色综合久久| 欧美成人黑人xx视频免费观看| 欧美性猛交xxxx乱大交| 欧美精品免费播放| 91成人在线播放| 色妞色视频一区二区三区四区| 久久视频精品在线| 精品亚洲aⅴ在线观看| 欧美猛少妇色xxxxx| 国产精品丝袜一区二区三区| 亚洲开心激情网| 国产精品视频专区| 91超碰中文字幕久久精品| 91豆花精品一区| 欧美日韩精品国产| 国产日产久久高清欧美一区| 国产亚洲激情在线| 久久久国产精品亚洲一区| 国模私拍一区二区三区| 久久99精品久久久久久琪琪| 久久久日本电影| 精品亚洲va在线va天堂资源站| 久久久人成影片一区二区三区观看| 日韩中文字幕视频在线| 亚洲加勒比久久88色综合| 成人亚洲激情网| 成人精品在线观看| 国产精品视频yy9099| 成人国内精品久久久久一区| 久久99热精品这里久久精品| 91九色国产社区在线观看| 在线观看国产精品日韩av| 欧美夜福利tv在线| 日韩欧美国产骚| 国产精品自在线| 韩国一区二区电影| 欧美片一区二区三区| 国产91精品久| 亚洲欧美成人精品| 成人a在线视频| 黄色成人在线免费| 欧美激情一区二区三区久久久| 亚洲欧美激情另类校园| 亚洲国产成人精品女人久久久| 久久久久久久久久国产| 久久久电影免费观看完整版| 欧美视频中文字幕在线| 欧美精品少妇videofree| 国内精品久久久久久影视8| 中文欧美在线视频| 久久影视电视剧凤归四时歌| 亚洲精品国产电影|