事件

事件流

描述的是從頁(yè)面中接收事件的順序。

  • IE——事件冒泡流
  • Netscape——事件捕獲流

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


使用事件處理程序

1.HTML事件處理程序
缺點(diǎn):HTML和JS代碼緊密的耦合在一起,需要同時(shí)修改

<input type="button" value="按鈕" id="btn1" onclick='alert("hello")'/>
或封裝在一個(gè)函數(shù)內(nèi):
<input type="button" value="按鈕2" id="btn2" onclick='showMes()'/>
<script>
    function showMes(){
        alert("hello world");
    }
</script>

2.DOM0級(jí)事件處理程序
實(shí)際上DOM0級(jí)是不存在的,DOM0級(jí)指的是IE4和網(wǎng)景4.0最初支持的DHTML
較傳統(tǒng)的方式:把一個(gè)函數(shù)賦值給一個(gè)事件的處理程序?qū)傩?/p>

<input type="button" value="按鈕3" Id="btn3" />
btn3.onclick=function(){
    alert("這是DOM0級(jí)事件處理程序");
}
//刪除事件:
btn3.onclick=null;

3.DOM2級(jí)事件處理程序
DOM2級(jí)事件定義了兩個(gè)方法:用于處理指定和刪除事件處理程序的操作addEventListener()和removeEventListener()
接收三個(gè)參數(shù):要處理的事件名、作為事件處理程序的函數(shù)和布爾值(true表示事件捕獲,false表示事件冒泡,一般為false,為了兼容各種瀏覽器)

<input type="button" value="按鈕4" Id="btn4" />

var btn4=document.getElementById("btn4");
btn4.addEventListener('click',showMes2,false);
//刪除事件
btn4.removeEventListener('click',showMes2,false);

跨瀏覽器解決

初步接觸js封裝思想
有關(guān)IE兼容內(nèi)容暫時(shí)沒(méi)看

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;
                    }
                },
                //刪除句柄
                removeHandler:function(element,type,handler){
                    if(element.removeEventListener){
                        element.removeEventListener(type,handler,false);
                    }else if(element.detachEvent){
                        element.detachEvent('on'+type,handler);
                    }else{
                        element['on'+type]=null;
                    }
                }

            }

            eventUtil.addHandler(btn3,'click',showMes);

事件對(duì)象event

在觸發(fā)DOM上的事件時(shí)都會(huì)產(chǎn)生一個(gè)對(duì)象

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

function showMes(event){
    alert("event是DOM事件上的對(duì)象!");
    alert(event.target.nodeName);//event.type
    event.stopPropagation();
            }
事件冒泡與事件捕獲要是同時(shí)進(jìn)行怎么辦

我們的瀏覽器更“喜愛(ài)”事件捕獲:它會(huì)先把useCapture為false的元素綁定事件放到一邊,按照事件捕獲正常的順序執(zhí)行useCapture為true的元素綁定事件,最后在按照事件冒泡順序執(zhí)行useCapture為false。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、問(wèn)答 1. dom對(duì)象的innerText和innerHTML有什么區(qū)別? innerHTML: 也就是從對(duì)象...
    饑人谷_羅偉恩閱讀 642評(píng)論 0 2
  • 本章內(nèi)容 理解事件流 使用事件處理程序 不同的事件類型 JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)...
    悶油瓶小張閱讀 292評(píng)論 0 0
  • JavaScript 程序采用了異步事件驅(qū)動(dòng)編程模型。在這種程序設(shè)計(jì)風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對(duì)象發(fā)...
    劼哥stone閱讀 1,278評(píng)論 3 11
  • 1:DOM0事件和DOM2級(jí)在事件監(jiān)聽(tīng)使用方式上有什么區(qū)別? 瀏覽器端的JavaScript采用的是事件驅(qū)動(dòng)的異步...
    饑人谷_bigJiao閱讀 287評(píng)論 0 0
  • 如何批量操作 css 如何獲取 DOM 計(jì)算后的樣式 使用getComputedStyle獲取元素計(jì)算后的樣式 實(shí)...
    _Dot912閱讀 580評(píng)論 1 3