未添加事件侦听器

时间:2021-06-24 15:19:52

标签: javascript html dom-events addeventlistener

因此,当通过 if 语句通过 JavaScript 插入事件侦听器以检查用户类型的 localStorage 时,事件侦听器未添加到 id closeBtn 上时遇到了问题。我检查了 userType,因为我对不同的 userType 有不同的导航。

当我没有通过 JavaScript 加载导航的 html 代码而只是将它放在 html-doc 中时,closeBtn 可以工作,但由于某种原因,当我通过 JavaScript 插入时它不会。奇怪的是,id navBtn 确实有效,它也在 closeBtn 的同一位置获得了一个事件侦听器。

let nav = {
  navBtn: document.getElementById('navBtn'),
  closeBtn: document.getElementById('closeBtn'),
  overlay: document.getElementById('overlay'),
  nav: document.getElementById('nav'),
  initnav: function() {
    if (this.nav) {
      if (localStorage.getItem('userType')) {
        if (localStorage.getItem('userType') == "company") {
          // prettier-ignore
          this.nav.innerHTML = `
                <main>
                    <aside>
                        <img src="./media/images/Erasmushogeschool-logo.png" alt="Erasmushogeschool Brussel logo">
                    </aside>
                    <ul>
                        <li class="active"><a href="./indexbedrijven.html">Home</a></li>
                        <li><a href="./careerlaunch2022.html">Careerlaunch 2022</a></li>
                        <li><a href="vacatures_bedrijven.html">Vacatures</a></li>
                        <li><a href="./agenda.html">Mijn Agenda</a></li>
                        <li><a href="./chats_bedrijf.html">Chat</a></li>
                        <li><a href="./index.html">Careerlaunch voor studenten</a></li>
                    </ul>
                </main>
                <footer>
                <div div class = "accountBtns" >
                    <div class="account" >
                    <a href = "./account.html" >
                        <div class="profilePic myProfile"></div>
                        <h4 id="userName">Vince</h4>
                        </a>
                    </div>
                    <button>Afmelden</button>
                </div>
                <div id="closeBtn">
                    <div></div>
                    <div></div>
                </div>
                </footer>
                `;
        } else if (localStorage.getItem('userType') == "student") {
          // prettier-ignore
          this.nav.innerHTML = `
                <main>
                    <aside>
                        <img src="./media/images/Erasmushogeschool-logo.png" alt="Erasmushogeschool Brussel logo">
                    </aside>
                    <ul>
                        <li class="active"><a href="index.html">Home</a></li>
                        <li><a href="./careerlaunch2022.html">Careerlaunch 2022</a></li>
                        <li><a href="./planning.html">Planning</a></li>
                        <li><a href="vacatures.html">Vacatures</a></li>
                        <li><a href="favorieten.html">Favoriete vacatures</a></li>
                        <li><a href="./agenda.html">Mijn Agenda</a></li>
                        <li><a href="chats.html">Chat</a></li>
                        <li><a href="game.html">Careerlaunch game</a></li>
                    </ul>
                </main>
                <footer>
                    <a class="account" href="./account.html">
                        <div>
                            <div class="profilePic myProfile"></div>
                            <h4 id="userName">Vince</h4>
                        </div>
                        <button>Afmelden</button>
                    </a>
                    <div id="closeBtn">
                        <div></div>
                        <div></div>
                    </div>
                </footer>
                `;
        }
      } else {
        //prettier-ignore
        this.nav.innerHTML = `
            <main>
            <aside>
                <img src="./media/images/Erasmushogeschool-logo.png" alt="Erasmushogeschool Brussel logo">
            </aside>
            <ul>
                <li class="active"><a href="index.html">Home</a></li>
                <li><a href="">Careerlaunch 2022</a></li>
                <li><a href="">Map</a></li>
                <li><a href="">Planning</a></li>
                <li><a href="vacatures.html">Vacatures</a></li>
                <li><a href="favorieten.html">Favoriete vacatures</a></li>
                <li><a href="">Mijn Agenda</a></li>
                <li><a href="chats.html">Chat</a></li>
                <li><a href="game.html">Careerlaunch game</a></li>
            </ul>
            </main>
            <footer>
                <div class="notLogged">
                    <div>
                        <a href="registreren_1-4.html" class="bluebox">Registreren</a>
                        <a href="login_student.html" class="graybox">log in</a>
                    </div>
                </div>
                <div id="closeBtn">
                    <div></div>
                    <div></div>
                </div>
            </footer>
            `;
      }
      this.navEventListnr();
    }

  },
  navEventListnr: function() {
    this.navBtn.addEventListener('click', () => {
      nav.animateNav("open");
    });
    console.log("closeListner");
    this.closeBtn.addEventListener('click', () => {
      nav.animateNav("close");
    });
  },
  animateNav: function(action) {
    console.log('open');
    if (action == "open") {
      this.navBtn.style.display = "none";
      this.overlay.style.display = "block";
      this.overlay.style.opacity = ".7";
      this.nav.style.right = "0vw";
    } else if (action == "close") {
      console.log('close');
      this.navBtn.style.display = "flex";
      this.nav.style.right = "-80vw";
      this.overlay.style.opacity = "0";
      setTimeout(() => {
        this.overlay.style.display = "none";
      }, 100);
    }
  }
};

nav.initnav();
<!DOCTYPE html>
<html lang="en">

<head>
  <title>Careerlaunch</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" href="./styles/reset.css">
  <link rel="stylesheet" type="text/css" href="./styles/index.css">
  <script type="module" src="./js/index.js" defer></script>
</head>

<body style="background-color: green;">
  <div id="overlay"></div>
  <div id="navBtn">
    <div></div>
    <div></div>
    <div></div>
  </div>
  <nav id='nav'>
    <main>
      <aside>
        <img src="./media/images/Erasmushogeschool-logo.png" alt="Erasmushogeschool Brussel logo">
      </aside>
      <ul>
        <li class="active"><a href="index.html">Home</a></li>
        <li><a href="">Careerlaunch 2022</a></li>
        <li><a href="">Map</a></li>
        <li><a href="">Planning</a></li>
        <li><a href="vacatures.html">Vacatures</a></li>
        <li><a href="favorieten.html">Favoriete vacatures</a></li>
        <li><a href="">Mijn Agenda</a></li>
        <li><a href="chats.html">Chat</a></li>
        <li><a href="game.html">Careerlaunch game</a></li>
      </ul>
    </main>
    <footer>
      <div class="notLogged">
        <div>
          <a href="registreren_1-4.html" class="bluebox">Registreren</a>
          <a href="login_student.html" class="graybox">log in</a>
        </div>
      </div>
      <div id="closeBtn">
        <div></div>
        <div></div>
      </div>
    </footer>
  </nav>
</body>

</html>

0 个答案:

没有答案