JS動(dòng)態(tài)append之后點(diǎn)擊事件無效

今天做項(xiàng)目用了append向HTML里面添加結(jié)構(gòu)代碼,代碼添加之后,單擊事件就沒反應(yīng)了。搞得我一臉懵逼,調(diào)了代碼很久實(shí)在不行,我百度了一下才發(fā)現(xiàn),append添加的節(jié)點(diǎn)單擊事件是不會(huì)生效的。
原因:
原來append中的節(jié)點(diǎn)是在整個(gè)文檔加載后才添加的,頁(yè)面并不會(huì)為未來的元素初始化添加點(diǎn)擊事件,所以使用這種方式動(dòng)態(tài)添加的節(jié)點(diǎn)中的點(diǎn)擊事件不會(huì)生效。
解決方法:
于是我只好改用事件代理來完成這次我的項(xiàng)目,把這次經(jīng)歷發(fā)在上面存一下檔了,希望下次能記住。
HTML代碼:

<main class="container" style="margin-top: 50px;margin-bottom: 50px">
    <div class="row content" id="content">

    </div>
</main>

append的代碼:我把下面這段代碼,加在content里面

  $('#content').append(`
       <div class="col-md-6">
          <img src="img/cart.png" class="addcart">
       </div>
       <div class="col-md-6">
           <img src="img/buy.png" class="buy">
       </div>
 `);

最終效果:


效果圖

事件代理:
思路:因?yàn)樽铋_始他們共同的父級(jí)content是在HTML結(jié)構(gòu)中的,所以將兩個(gè)單擊事件代理給content,通過單擊獲得的class名來判斷點(diǎn)擊的是哪一個(gè)對(duì)象,再進(jìn)行具體操作

$('#content').on('click',function (e) {
  var target=e.target||e.srcElement;//獲取當(dāng)前點(diǎn)擊的對(duì)象
  var cls=target.className;//獲取當(dāng)前點(diǎn)擊對(duì)象的class名
  if(cls==='addcart'){//如果點(diǎn)擊的是加入購(gòu)物車
      console.log('addcart')
  }else if (cls==='buy') {//如果點(diǎn)擊的是立即購(gòu)買
      console.log('buy')
  }
});
最后編輯于
?著作權(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ù)。

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