JS事件委托

事件委托從字面意思上理解就是把事件委托給別人做。這樣有什么好處呢?設(shè)想一下,一個ul里有很多l(xiāng)i,現(xiàn)在要給每一個li都添加點擊事件,就需要循環(huán)給li添加事件,這樣性能會很差。這時候就可以使用事件委托解決。先了解下他的原理:利用事件冒泡,把子元素的事件添加到父元素上,觸發(fā)事件執(zhí)行。
需要注意的地方在下面的demo里都注釋出來了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul id="list">
        <li>點我</li>
        <p>點我沒用</p>
        <li>點我</li>
        <p>點我也沒用</p>
        <li>點我</li>
    </ul>
    <script>
        var oUl = document.getElementById("list");
        oUl.onclick = function(event){
            event = event || window.event;
            //獲取事件源(需要考慮兼容,前者標(biāo)準(zhǔn)瀏覽器,后者IE)
            var target = event.target || event.srcElement;
            console.log(target.nodeName);
            //這里注意獲取到的nodeName的值全為大寫
            if (target.nodeName == "LI") {
                alert("hello");
            }
        };
        //使用事件委托寫鼠標(biāo)移入移出事件時不能使用onmouseenter和onmouseleave,
        //因為他倆不支持事件冒泡
        oUl.onmouseover = function(event){
            event = event || window.event;
            var target = event.target || event.srcElement;
            if (target.nodeName == "P") {
                target.style.background = "green";
            }
        };
        oUl.onmouseout = function(event){
            event = event || window.event;
            var target = event.target || event.srcElement;
            if (target.nodeName == "P") {
                target.style.background = "";
            }
        };
    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 一直以來,對js的一些概念還是不清晰的,很多都沒有搞明白,今天無意間在群里見他們提起事件委托,所以查找了一些資料,...
    蝴蝶結(jié)199007閱讀 290評論 1 3
  • 前言 事件委托,也叫事件代理,是js事件中的一種常用技巧。事件委托的原理就是利用冒泡事件的機制,為一些節(jié)點的祖先節(jié)...
    zkhChris閱讀 525評論 0 3
  • 本來打算介紹clipboard.js如何使用,卻發(fā)現(xiàn)在https://clipboardjs.com介紹中事件委托...
    最愛是荔枝閱讀 327評論 0 0
  • 定義:通俗的講,事件就是onclick,onmouseover,onmouseout等就是事件,委托呢,就是讓別人...
    JYOKETSU3閱讀 344評論 0 0
  • 我們收取快遞有兩種方法:一是在特定的地點等快遞的到來,二是委托人代收。現(xiàn)實當(dāng)中,我們大都采用委托的方案。而委托人接...
    饑人谷_oathy閱讀 781評論 0 2