事件委托的正確寫法

一般網(wǎng)上的代碼都是下面這個(gè)樣子:

var oUl = document.getElementById("ul1");
  oUl.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
            alert(123);
         alert(target.innerHTML);
    }
  }

但是如果你的li標(biāo)簽里嵌套了其他標(biāo)簽,比如:

<ul id="ul1">
    <li><span>111</span></li>
</ul>

那么當(dāng)你點(diǎn)擊“111”的時(shí)候上面的js寫法就是無效的,因?yàn)槟阒苯狱c(diǎn)擊的并不是li標(biāo)簽。所以在這里我們還需要判斷點(diǎn)擊的標(biāo)簽的父元素是不是li,所以這里的代碼中要加一個(gè)while循環(huán):

var oUl = document.getElementById("ul1");

oUl.onclick = function(e){
    var e = e || window.event; 
    var target = e.target || e.srcElement;
    while(target.tagName !== 'LI'){
      target = target.parentNode;
      if(target === oUl){
        target = null;
        break;
      }
    }
    if(target){
      console.log('你點(diǎn)擊了ul中的li');
    }else{
      console.log('你點(diǎn)擊的不是ul中的li');
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

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

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