Skip to content

js动态添加dom,如何绑定事件

🕒 Published at:

原理

首先要明白浏览器在加载页面的时候是按顺序来加载的,这样以来就很清楚了,js 动态添加 dom 以后,这些 dom 并没有绑定事件,这个时候最简单的一个办法就是:将绑定事件的方法封装到一个函数 A 中,在动态添加完 dom 以后立即执行一次函数 A 即可。

注意

其次需要注意的是,在你可能同时需要添加许多的 dom,不要添加一个就执行一次函数 A,这样会增加浏览器的负载,你需要在所有 dom 添加完以后在执行函数 A,例如你用一个 for 循环遍历 dom 组合并拼接成一个字符串,然后添加到某个父级 dom 里面,这个时候你需要在循环外添加一次就可以了。

代码

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>添加div并绑定点击事件</title>
    <style>
      div.btn {
        width: 200px;
        height: 50px;
        line-height: 50px;
        text-align: center;
        border: solid 1px #000;
        cursor: pointer;
      }
      div.innerDiv {
        width: 50px;
        height: 50px;
        background-color: black;
        margin: 10px;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <div class="aa">
      <div class="btn">添加div并绑定点击事件</div>
      <div class="outerDiv"></div>
    </div>
    <script>
      function getClass(classname) {
        return document.getElementsByClassName(classname)
      }
      getClass('btn')[0].onclick = function () {
        addDom()
      }
      //    将点击事件封装为函数
      function funA() {
        for (var i = 0; i < getClass('innerDiv').length; i++) {
          getClass('innerDiv')[i].onclick = function () {
            alert(this.innerText)
          }
        }
      }
      //    将添加dom封装为函数
      function addDom() {
        var oldHtml = ''
        for (var j = 0; j < 6; j++) {
          oldHtml += '<div class="innerDiv">' + j + '</div>'
        }
        getClass('outerDiv')[0].innerHTML = oldHtml
        funA()
      }
      //    如果将函数A放在这里就不会起作用的
      //    funA();
    </script>
  </body>
</html>
Powered by 荣顶
|
Copyright © 2018-present
|
Released under the MIT License
|
Views: