Fremount 2022-07-20 08:54 采纳率: 11.1%
浏览 72

循环使用addEventListener绑定事件无效

问题遇到的现象和发生背景

遍历dom元素循环使用addEventListener绑定事件无效

问题相关代码,请勿粘贴截图

HTML模块:

 <div class="tab tab1">
        <ul class="tab-list">
          <li class="tab-item first-floor">
            <div class="tab-title">
              <h3>Epson Smart Panel</h3>
              <h4>(无线应用解决方案)</h4>
            </div>
            <div class="tab-content first-floor-content">11111</div>
          </li>
          <li class="tab-item first-floor">
            <div class="tab-title">
              <h3>Epson Smart Panel</h3>
              <h4>(无线应用解决方案)</h4>
            </div>
            <div class="tab-content first-floor-content">
              <div class="menu">
                <ul class="menu-list">
                  <li class="menu-item">
                    <div class="menu-item-title" collapsed="false">
                      <i class="iconfont download"></i>
                      <span>软件下载</span>
                    </div>
                    <div class="menu-item-content">
                      <div class="download-info">
                        <h5>适用手机系统</h5>
                        <div class="download-info-class-list">
                          <div class="download-info-class-item">
                            <span>iOS系统和设备 : iOS 9.0或以上版本的iPhone/iPod
                              touch/iPad</span>
                          </div>
                          <div class="download-info-class-item">
                            <span>Android系统和设备 : Android
                              4.4或以上版本的设备</span>
                          </div>
                          <div class="download-info-class-item">
                            <span>适用机型:</span>
                            <div class="tab tab2">
                              <ul class="tab-list">
                                <li class="tab-item second-floor">
                                  <div class="tab-title2">
                                    <span>DS-360W</span>
                                  </div>
                                  <div class="tab-content second-floor-content">
                                    <div class="qrcode-box">
                                      <div class="qrcode">
                                        <div class="qrcode-img-box">
                                          <img src="./img/bg-img/qrcode.png" />
                                        </div>
                                        <div class="qrcode-intro">
                                          <i class="iconfont iphone"></i>
                                          <span>扫描二维码</span>
                                          <span>下载IOS客户端</span>
                                        </div>
                                      </div>
                                      <div class="qrcode">
                                        <div class="qrcode-img-box">
                                          <img src="./img/bg-img/qrcode.png" />
                                        </div>
                                        <div class="qrcode-intro">
                                          <i class="iconfont android"></i>
                                          <span>扫描二维码</span>
                                          <span>下载IOS客户端</span>
                                        </div>
                                      </div>
                                    </div>
                                  </div>
                                </li>
                                <li class="tab-item second-floor">
                                  <div class="tab-title2">
                                    <span>DS-570W</span>
                                  </div>
                                  <div class="tab-content second-floor-content">111</div>
                                </li>
                                <li class="tab-item second-floor">
                                  <div class="tab-title2">
                                    <span>DS-1660W</span>
                                  </div>
                                  <div class="tab-content second-floor-content">222</div>
                                </li>
                                <li class="tab-item second-floor">
                                  <div class="tab-title2">
                                    <span>ES-60W</span>
                                  </div>
                                  <div class="tab-content second-floor-content">333</div>
                                </li>
                              </ul>
                              <div class="tab-content-container second-floor-container"></div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </li>
                  <li class="menu-item">
                    <div class="menu-item-title" collapsed="false">
                      <i class="iconfont install"></i>
                      <span>安装指南</span>
                    </div>
                    <div class="menu-item-content">33333</div>
                  </li>
                  <li class="menu-item">
                    <div class="menu-item-title" collapsed="false">
                      <i class="iconfont use-guide"></i>
                      <span>使用指南</span>
                    </div>
                    <div class="menu-item-content">22222</div>
                  </li>
                  <li class="menu-item">
                    <div class="menu-item-title" collapsed="true">
                      <i class="iconfont question"></i>
                      <span>常见问题</span>
                    </div>
                    <div class="collapse-list" style="visibility: hidden">
                      <div class="collapse-item">
                        <span>IOS版FAQ</span>
                      </div>
                      <div class="collapse-item">
                        <span>Android版FAQ</span>
                      </div>
                    </div>
                    <div class="menu-item-content">33333</div>
                  </li>
                </ul>
                <div class="menu-content-container"></div>
              </div>
            </div>
          </li>
          <li class="tab-item first-floor">
            <div class="tab-title">
              <h3>Epson DS-730N</h3>
              <h4>(网络LAN应用解决方案)</h4>
            </div>
            <div class="tab-content first-floor-content">33333</div>
          </li>
        </ul>
        <div class="tab-content-container first-floor-container"></div>
      </div>

JS模块:

  function totransFormArr(fakeArr) {
  let newArr = [];
  fakeArr.forEach((element, index) => {
    newArr[index] = fakeArr[index];
  });
  return newArr;
}

// 当前指示tab的index的值
var tab1Index = 1;
// 这里只取第一层的tab-item
var tab1DomList = totransFormArr(
  document.querySelectorAll(" .tab1 .first-floor")
);

var tab1ContentDomList = totransFormArr(
  // 这里也需要注意 有重复的节点
  document.querySelectorAll(".tab1 .first-floor-content")
);

function initTable1() {
  // tab1栏模块
  let tabContainer1 = document.querySelector(".tab1 .first-floor-container");
  tabContainer1.innerHTML = tab1ContentDomList[tab1Index].innerHTML;
  tab1DomList[tab1Index].querySelector(".tab-title").style.color = "#0c89ef";
  tab1DomList.forEach((e, index) => {
    e.removeChild(tab1ContentDomList[index]);
    e.querySelector(".tab-title").addEventListener("click", () => {
      let tabContainer1 = document.querySelector(
        ".tab1 .first-floor-container"
      );
      let titleDom = e.querySelector(".tab-title");
      titleDom.style.color = "#0c89ef";
      tabContainer1.innerHTML = tab1ContentDomList[index].innerHTML;
      tab1DomList[tab1Index].querySelector(".tab-title").style.color = "#000";
      tab1Index = index;
    });
  });
}
initTable1();

var tab2Index = 0;
var tab2DomList = document.querySelectorAll(".tab2 .tab-list .second-floor");
var tab2ContentDomList = document.querySelectorAll(
  ".tab2 .second-floor-content"
);

function initTable2() {
  // tab2栏模块
  let tabContainer2 = document.querySelector(".tab2 .second-floor-container");
  tabContainer2.innerHTML = tab2ContentDomList[tab2Index].innerHTML;
  tab2DomList[tab2Index].querySelector(".tab-title2").style.color = "#0c89ef";
  tab2DomList.forEach((e, index) => {
    e.removeChild(tab2ContentDomList[index]);
    let titleDom = e.querySelector(".tab-title2");
    titleDom.addEventListener("click", () => {
      let tabContainer2 = document.querySelector(
        ".tab2 .second-floor-container"
      );
      titleDom.style.color = "#0c89ef";
      tabContainer2.innerHTML = tab2ContentDomList[index].innerHTML;
      tab2DomList[tab2Index].querySelector(".tab-title2").style.color = "#000";
      tab2Index = index;
    });
  });
initTable2();
运行结果及报错内容

initTable2时无效

我的解答思路和尝试过的方法

获取不到元素 我给tab2底下的节点新添加了类

我想要达到的结果

tab2组件可以绑定上click事件

  • 写回答

1条回答 默认 最新

  • 崽崽的谷雨 2022-07-20 09:41
    关注
    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <div class="tab tab1">
            <ul class="tab-list">
                <li class="tab-item first-floor">
                    <div class="tab-title">
                        <h3>Epson Smart Panel</h3>
                        <h4>(无线应用解决方案)</h4>
                    </div>
                    <div class="tab-content first-floor-content">11111</div>
                </li>
                <li class="tab-item first-floor">
                    <div class="tab-title">
                        <h3>Epson Smart Panel</h3>
                        <h4>(无线应用解决方案)</h4>
                    </div>
                    <div class="tab-content first-floor-content">
                        <div class="menu">
                            <ul class="menu-list">
                                <li class="menu-item">
                                    <div class="menu-item-title" collapsed="false">
                                        <i class="iconfont download"></i>
                                        <span>软件下载</span>
                                    </div>
                                    <div class="menu-item-content">
                                        <div class="download-info">
                                            <h5>适用手机系统</h5>
                                            <div class="download-info-class-list">
                                                <div class="download-info-class-item">
                                                    <span>iOS系统和设备 : iOS 9.0或以上版本的iPhone/iPod
                                                        touch/iPad</span>
                                                </div>
                                                <div class="download-info-class-item">
                                                    <span>Android系统和设备 : Android
                                                        4.4或以上版本的设备</span>
                                                </div>
                                                <div class="download-info-class-item">
                                                    <span>适用机型:</span>
                                                    <div class="tab tab2">
                                                        <ul class="tab-list">
                                                            <li class="tab-item second-floor">
                                                                <div class="tab-title2">
                                                                    <span>DS-360W</span>
                                                                </div>
                                                                <div class="tab-content second-floor-content">
                                                                    <div class="qrcode-box">
                                                                        <div class="qrcode">
                                                                            <div class="qrcode-img-box">
                                                                                <img src="./img/bg-img/qrcode.png" />
                                                                            </div>
                                                                            <div class="qrcode-intro">
                                                                                <i class="iconfont iphone"></i>
                                                                                <span>扫描二维码</span>
                                                                                <span>下载IOS客户端</span>
                                                                            </div>
                                                                        </div>
                                                                        <div class="qrcode">
                                                                            <div class="qrcode-img-box">
                                                                                <img src="./img/bg-img/qrcode.png" />
                                                                            </div>
                                                                            <div class="qrcode-intro">
                                                                                <i class="iconfont android"></i>
                                                                                <span>扫描二维码</span>
                                                                                <span>下载IOS客户端</span>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </li>
                                                            <li class="tab-item second-floor">
                                                                <div class="tab-title2">
                                                                    <span>DS-570W</span>
                                                                </div>
                                                                <div class="tab-content second-floor-content">111</div>
                                                            </li>
                                                            <li class="tab-item second-floor">
                                                                <div class="tab-title2">
                                                                    <span>DS-1660W</span>
                                                                </div>
                                                                <div class="tab-content second-floor-content">222</div>
                                                            </li>
                                                            <li class="tab-item second-floor">
                                                                <div class="tab-title2">
                                                                    <span>ES-60W</span>
                                                                </div>
                                                                <div class="tab-content second-floor-content">333</div>
                                                            </li>
                                                        </ul>
                                                        <div class="tab-content-container second-floor-container"></div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </li>
                                <li class="menu-item">
                                    <div class="menu-item-title" collapsed="false">
                                        <i class="iconfont install"></i>
                                        <span>安装指南</span>
                                    </div>
                                    <div class="menu-item-content">33333</div>
                                </li>
                                <li class="menu-item">
                                    <div class="menu-item-title" collapsed="false">
                                        <i class="iconfont use-guide"></i>
                                        <span>使用指南</span>
                                    </div>
                                    <div class="menu-item-content">22222</div>
                                </li>
                                <li class="menu-item">
                                    <div class="menu-item-title" collapsed="true">
                                        <i class="iconfont question"></i>
                                        <span>常见问题</span>
                                    </div>
                                    <div class="collapse-list" style="visibility: hidden">
                                        <div class="collapse-item">
                                            <span>IOS版FAQ</span>
                                        </div>
                                        <div class="collapse-item">
                                            <span>Android版FAQ</span>
                                        </div>
                                    </div>
                                    <div class="menu-item-content">33333</div>
                                </li>
                            </ul>
                            <div class="menu-content-container"></div>
                        </div>
                    </div>
                </li>
                <li class="tab-item first-floor">
                    <div class="tab-title">
                        <h3>Epson DS-730N</h3>
                        <h4>(网络LAN应用解决方案)</h4>
                    </div>
                    <div class="tab-content first-floor-content">33333</div>
                </li>
            </ul>
            <div class="tab-content-container first-floor-container"></div>
        </div>
    </body>
    <script>
        function totransFormArr(fakeArr) {
            let newArr = [];
            fakeArr.forEach((element, index) => {
                newArr[index] = fakeArr[index];
            });
            return newArr;
        }
    
        // 当前指示tab的index的值
        var tab1Index = 1;
        // 这里只取第一层的tab-item
        var tab1DomList = totransFormArr(
            document.querySelectorAll(" .tab1 .first-floor")
        );
    
        var tab1ContentDomList = totransFormArr(
            // 这里也需要注意 有重复的节点
            document.querySelectorAll(".tab1 .first-floor-content")
        );
    
        function initTable1() {
            // tab1栏模块
            let tabContainer1 = document.querySelector(".tab1 .first-floor-container");
            tabContainer1.innerHTML = tab1ContentDomList[tab1Index].innerHTML;
            tab1DomList[tab1Index].querySelector(".tab-title").style.color = "#0c89ef";
            tab1DomList.forEach((e, index) => {
                e.removeChild(tab1ContentDomList[index]);
                e.querySelector(".tab-title").addEventListener("click", () => {
                    let tabContainer1 = document.querySelector(
                        ".tab1 .first-floor-container"
                    );
                    let titleDom = e.querySelector(".tab-title");
                    titleDom.style.color = "#0c89ef";
                    tabContainer1.innerHTML = tab1ContentDomList[index].innerHTML;
                    tab1DomList[tab1Index].querySelector(".tab-title").style.color = "#000";
                    tab1Index = index;
                });
            });
        }
        initTable1();
    
        var tab2Index = 0;
        var tab2DomList = document.querySelectorAll(".tab2 .tab-list .second-floor");
        var tab2ContentDomList = document.querySelectorAll(
            ".tab2 .second-floor-content"
        );
    
        function initTable2() {
            // tab2栏模块
            let tabContainer2 = document.querySelector(".tab2 .second-floor-container");
            tabContainer2.innerHTML = tab2ContentDomList[tab2Index].innerHTML;
            tab2DomList[tab2Index].querySelector(".tab-title2").style.color = "#0c89ef";
            tab2DomList.forEach((e, index) => {
                e.removeChild(tab2ContentDomList[index]);
                let titleDom = e.querySelector(".tab-title2");
                titleDom.addEventListener("click", () => {
                    alert("9999")
                    let tabContainer2 = document.querySelector(
                        ".tab2 .second-floor-container"
                    );
                    titleDom.style.color = "#0c89ef";
                    tabContainer2.innerHTML = tab2ContentDomList[index].innerHTML;
                    tab2DomList[tab2Index].querySelector(".tab-title2").style.color = "#000";
                    tab2Index = index;
                });
            });
        }
        initTable2();
    </script>
    
    </html>
    

    点击事件加上了啊

    评论

报告相同问题?

问题事件

  • 创建了问题 7月20日

悬赏问题

  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)