使用原生 JS 實(shí)現(xiàn)事件委托

事件委托是什么

把若干個(gè)節(jié)點(diǎn)上的相同事件的處理函數(shù)event listener綁定到它的父節(jié)點(diǎn)上去, 在父節(jié)點(diǎn)上統(tǒng)一處理,減輕對(duì)event listener的管理負(fù)擔(dān)。

為什么要有事件委托

1.監(jiān)聽(tīng)還不存在的元素或者已經(jīng)存在的元素
2.減少監(jiān)聽(tīng)器的個(gè)數(shù)

如何做到事件委托

<body>
  <button id="xxx">取號(hào)</button>
  <ul>
    <li>
      <ol id="yyy"></ol>
    </li>
  </ul>
  <script>
    let button = document.querySelector("#xxx");
    let yyy = document.querySelector('#yyy');
    button.addEventListener('click',function(){
      let number = parseInt(Math.random() * 100, 10);
      let li = document.createElement('li');
      let span = document.createElement('span');
      span.textContent = number;
      li.appendChild(span);
      yyy.appendChild(li);
    });
    yyy.addEventListener('click',function(e){
      let element = e.target;
      while(element.tagName !== "LI"){
        if(element === yyy){
          element = null;
          break;
        }
        element = element.parentNode;
      }
      element && element.remove()
    })
  </script>
</body>

用戶先點(diǎn)擊取號(hào),再點(diǎn)擊li元素或者span元素時(shí),就執(zhí)行ol元素的監(jiān)聽(tīng)事件,把點(diǎn)擊的li元素或span元素刪除,不用監(jiān)聽(tīng)每個(gè)元素,監(jiān)聽(tīng)它們的父元素即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容