简体   繁体   English

如何将事件侦听器添加到 javascript 上的附加内容

[英]how to add event listener to appened content on javascript

i have created my own jquery because i need only these 4 functions,我创建了自己的 jquery 因为我只需要这 4 个功能,

everything is working well until i click append.一切正常,直到我点击 append。

i tried document.getElementsByTag because it returns live htmlcollection but didnt work我尝试document.getElementsByTag因为它返回实时 htmlcollection 但没有用

 function $(s) { var el; if (s instanceof HTMLElement) { el = [s]; } else { el = document.querySelectorAll(s); } const obj = { elm: el, show: function() { var i = obj.elm.length; while (i--) { obj.elm[i].style.display = ""; } }, hide: function() { var i = obj.elm.length; while (i--) { obj.elm[i].style.display = "none"; } }, on: function(ev,cb) { var i = obj.elm.length; while(i--) { obj.elm[i].addEventListener(ev,cb); } }, append: function(cn) { var i = obj.elm.length; while(i--) { obj.elm[i].innerHTML += cn; } } } return obj }
 <ul> <li>Click to hide</li> <li>Click to hide</li> <li>Click to hide</li> <li>Click to hide</li> </ul> <button id="sh">Show</button> <button id="ap">Append</button> <script> document.addEventListener("DOMContentLoaded", function() { $("li").on("click", function() { $("li").hide(); }); $("#sh").on("click", function() { $("li").show(); }); $("#ap").on("click", function() { $("ul").append("<li>X<li/>"); }); }); </script>

I would change your code a bit ( innerHTML += is a bad practice, it breaks the current listeners).我会稍微更改您的代码( innerHTML +=是一种不好的做法,它会破坏当前的侦听器)。

First change your click listener:首先更改您的点击侦听器:

  $("#ap").on("click", function() {
    const li = document.createElement('li');
    li.innerText = 'X';
    // add the event listeners to the li element
    li.addEventListener(...)
    // append it
    $("ul").append(li);
  });

Now change this obj.elm[i].innerHTML += cn;现在改变这个obj.elm[i].innerHTML += cn; to obj.elm[i].insertAdjacentElement('beforend', cn) .obj.elm[i].insertAdjacentElement('beforend', cn) Notice that in this version, cn is an HTML element and NOT a string, and it's using insertAdjacentElement instead of innerHTML += so you don't lose the previous event listeners.请注意,在此版本中,cn 是一个 HTML 元素而不是字符串,并且它使用insertAdjacentElement而不是innerHTML += ,因此您不会丢失以前的事件侦听器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM