为什么我的 JS 'click event' 只 运行 一次?

Why does my JS 'click event' only run once?

我创建了一个点击事件,它打开之前 'hidden' div 并在您点击同一个按钮后再次关闭它。

但是,它只运行一次(一次打开,一次关闭)- 我无法解释为什么再次单击它时它不起作用。

let readMore = document.getElementById('clickAbout');
let moreInfo = document.getElementById('about');
let changeSepa = document.getElementById('sepChange');


readMore.addEventListener('click', function(){
    changeSepa.style.height = '2rem';
    if (moreInfo.className == "") {
        moreInfo.className = "open";
        moreInfo.style.display = 'block';
    } else {
        
            moreInfo.style.display = 'none';
    }
});

发生这种情况是因为您正在检查 className == "",但您正在将 className 修改为“open”。在第二次单击时,它检查现在“打开”的 className 并转到 else 块。在第三次单击时,您希望它进入第一个块,但 className 仍然是“打开的”。

为了轻松修复,只需更改 else 块中的 className

else {
  moreInfo.className = "";  
  moreInfo.style.display = 'none';
}

此外,我建议您在元素上使用 classList 属性 https://developer.mozilla.org/en-US/docs/Web/API/Element/classList

使用 class 列表可能如下所示:

readMore.addEventListener("click", function () {
  changeSepa.style.height = "2rem";
  if (moreInfo.className == "") {
    moreInfo.classList.add("open");
    moreInfo.style.display = "block";
  } else {
    moreInfo.classList.remove("open");
    moreInfo.style.display = "none";
  }
});

甚至

readMore.addEventListener("click", function () {
  changeSepa.style.height = "2rem";
  moreInfo.classList.toggle("open");
  if (moreInfo.className == "") {
    moreInfo.style.display = "block";
  } else {
    moreInfo.style.display = "none";
  }
});