DOM事件探秘(一)

DOM事件學(xué)習(xí),事件流站刑、事件處理程序和事件對(duì)象


1.事件流

從頁(yè)面中接收事件的順序

IE:事件冒泡流
即事件最開(kāi)始由最具體的元素(文檔中嵌套層次最深的那個(gè)節(jié)點(diǎn))接收吝秕,然后逐級(jí)向上轉(zhuǎn)播至最不具體的節(jié)點(diǎn)(文檔)瘫析。
Netscape:事件捕獲流
不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件佛寿,而最具體的節(jié)點(diǎn)最后接收到事件


2.事件處理程序

HTML事件處理程序
事件直接加在HTML代碼中,不建議使用
DOM 0級(jí)事件處理程序
DOM 2級(jí)事件處理程序(IE不支持)
定義了兩個(gè)方法:addEventListener() 和 removeEventListener()何暇,這倆方法都接收三個(gè)參數(shù):

要處理的事件名陶夜;
作為事件處理程序的函數(shù)名;
布爾值——冒泡(false)或捕獲(true)

IE事件處理程序
attachEvent()和detachEvent()裆站,接收相同的兩個(gè)參數(shù):事件處理程序的名稱(chēng)事件處理程序的函數(shù)

  //事件處理程序 
     <div id="box">
         <input type="button" value="按鈕" id="btn" onclick="showMes()">
         <input type="button" value="按鈕2" id="btn2">
         <input type="button" value="按鈕3" id="btn3">
         <a href="event.html" id="go">跳轉(zhuǎn)</a>
      </div>
      <script>
         function showMes(event){
            alert("HTML事件處理程序")条辟;
            event.stopPropagation();//阻止事件冒泡
         }
         function stopGoto(event){
            event.stopPropagation();
            event.preventDefalult();//阻止事件默認(rèn)行為
}
         var btn2 = document.getElementById("btn2");
         var btn3 = document.getElementById("btn3");
         var go= document.getElementById("go");
         btn2.onclick = function(){
            alert("DOM 0級(jí)事件處理程序!")
         }
         //btn2.onclick = null;//刪除事件

         //DOM 2級(jí)事件處理程序
         btn3.addEventListener("click", showMes, false);//要用click而不用onclick宏胯!
         btn3.addEventListener("click", function(){
            alert(this.value);//this,引用被觸發(fā)的元素
         }, false);
         //btn3.removeEventListener("click", showMes, false);//刪除事件
      </script>    

跨瀏覽器事件處理程序

//將其封裝在對(duì)象eventUtil中
        var eventUtil = {
            //添加句柄
            addHandler:function(element, type, handler){
               if(element.addEventListener){
                  element.addEventListener(type, handler, false);//DOM2級(jí)事件處理程序
               }else if(element.attachEvent){
                  element.attachEvent("on"+type, handler);//因?yàn)镈OM2里的type是沒(méi)有‘on’的事件
               }else{
                  element["on" + type] = handler;
               }
            }
         }
        eventUtil.addHandler(btn3, "click", showMes);
        eventUtil.addHandler(go, "click", stopGoto);

3.事件對(duì)象

DOM中的事件對(duì)象

  1. type屬性 用于獲取事件類(lèi)型
  2. target屬性 用于獲取事件目標(biāo)
  3. stopPropagation()方法 用于阻止事件冒泡
  4. preventDefault()方法 阻止事件的默認(rèn)行為

IE中的事件對(duì)象

  1. type屬性 獲取事件類(lèi)型
  2. srcElement屬性 獲取事件目標(biāo)
//
function showMes(enent){
   event = event || window.event;//主要解決IE8之前的瀏覽器兼容   
   var ele = event.target || event.srcElement;
   alert(ele);
   event.stopPropagation();//阻止事件冒泡
}
  1. cancelBubble屬性 阻止事件冒泡
  2. returnValue屬性 阻止事件默認(rèn)行為

示例event.js

//event.js
var eventUtil={
            // 添加句柄
            addHandler:function(element,type,handler){
               if(element.addEventListener){
                 element.addEventListener(type,handler,false);
               }else if(element.attachEvent){
                 element.attachEvent('on'+type,handler);
               }else{
                 element['on'+type]=handler;
               }
            },
            
          getEvent:function(event){
            return event?event:window.event;
          },
          getType:function(event){
            return event.type;
          },
          getElement:function(event){
            return event.target || event.srcElement;
          },
          preventDefault:function(event){
            if(event.preventDefault){
              event.preventDefault();
            }else{
              event.returnValue=false;
            }
          },
         stopPropagation:function(event){
           if(event.stopPropagation){
             event.stopPropagation();
           }else{
             event.cancelBubble=true;
           }
         }
  };

示例script.js

//script.js
window.onload=function(){
  var go=document.getElementById('go'),
      box=document.getElementById('box');

  eventUtil.addHandler(box,'click',function(){
    alert('我是整個(gè)父盒子');
  });

  eventUtil.addHandler(go,'click',function(e){
    //e=eventUtil.getEvent(e);
    e=e || window.event;
    alert(eventUtil.getElement(e).nodeName);
    eventUtil.preventDefault(e);
    eventUtil.stopPropagation(e);
  });
}羽嫡;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肩袍,隨后出現(xiàn)的幾起案子杭棵,更是在濱河造成了極大的恐慌,老刑警劉巖氛赐,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜屠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鹰祸,警方通過(guò)查閱死者的電腦和手機(jī)甫窟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛙婴,“玉大人粗井,你說(shuō)我怎么就攤上這事〗滞迹” “怎么了浇衬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)餐济。 經(jīng)常有香客問(wèn)我耘擂,道長(zhǎng),這世上最難降的妖魔是什么絮姆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任醉冤,我火速辦了婚禮,結(jié)果婚禮上篙悯,老公的妹妹穿的比我還像新娘蚁阳。我一直安慰自己,他們只是感情好鸽照,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布螺捐。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪定血。 梳的紋絲不亂的頭發(fā)上赔癌,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音澜沟,去河邊找鬼届榄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛倔喂,可吹牛的內(nèi)容都是我干的铝条。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼席噩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼班缰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起悼枢,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤埠忘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后馒索,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體莹妒,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绰上,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旨怠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜈块,死狀恐怖鉴腻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情百揭,我是刑警寧澤爽哎,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站器一,受9級(jí)特大地震影響课锌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祈秕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一渺贤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踢步,春花似錦癣亚、人聲如沸丑掺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至兼丰,卻和暖如春玻孟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鳍征。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工黍翎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艳丛。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓匣掸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親氮双。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碰酝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • JavaScript 程序采用了異步事件驅(qū)動(dòng)編程模型。在這種程序設(shè)計(jì)風(fēng)格下戴差,當(dāng)文檔送爸、瀏覽器、元素或與之相關(guān)的對(duì)象發(fā)...
    劼哥stone閱讀 1,256評(píng)論 3 11
  • 一、問(wèn)答 1. dom對(duì)象的innerText和innerHTML有什么區(qū)別球匕? innerHTML: 也就是從對(duì)象...
    饑人谷_羅偉恩閱讀 597評(píng)論 0 2
  • 以下文章為轉(zhuǎn)載纹磺,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂亮曹,特分享于此爽航。 什么是事件? 事件(E...
    jxyjxy閱讀 3,037評(píng)論 1 10
  • 本章內(nèi)容 理解事件流 使用事件處理程序 不同的事件類(lèi)型 JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)...
    悶油瓶小張閱讀 283評(píng)論 0 0
  • 多線程的最大副作用: 并發(fā). 如果多個(gè)邏輯控制流在時(shí)間上發(fā)生了重疊, 就會(huì)產(chǎn)生并發(fā). 邏輯控制流是指一次程序操作....
    滬上最強(qiáng)亞巴頓閱讀 4,098評(píng)論 1 12