2

我有两个用它们的 ID 定义的按钮:but-toggle, but-close for show hide a panel :

<button id="but-toggle">Panel</button>
<div id="main-panel" style="display:none">
   <button id="but-close">X</button>
   <!-- some panel data -->
</div>

现在我有一个 JS 函数,它切换分配给但切换的面板(显示/隐藏),如下所示:

(function(){document.getElementById("but-toggle").addEventListener("click",function(){
var pan = document.getElementById("main-panel");
if(pan.style.display==="inline-block")
{pan.style.display="none"}
else
{pan.style.display="inline-block"}
});})();

我的问题是如何在不编写两个函数的情况下对两个按钮使用相同的函数,每个函数一个。我想要一个基于它们的 id 的元素解决方案,因为这些类是不同的,并且不能为此使用 getElementByClass

谢谢

4

2 回答 2

2

您可以使用以下内容获取所有按钮

 var btns=document.getElementsByTagName('button');
     
 for (let i = 0; i < btns.length; i++) {
   btns[i].addEventListener("click", function() {
     //code
   });
 }
     

(或者)

如果您使用带有类型按钮的输入标签

 document.querySelectorAll("input[type=button]");

(OR) 基于多个 ID

document.querySelectorAll('#id1, #id2, #id3');

然后你可以添加 eventListener

于 2021-03-15T12:08:04.223 回答
2

您可以使用document.querySelector从 ID 列表中获取元素列表:

function toggleFn() {
  const pan = document.getElementById("main-panel");
  if(pan.style.display === "inline-block") {
    pan.style.display = "none";
  } else {
    pan.style.display = "inline-block";
  }
}
document.querySelector("#Id1, #Id2")
  .forEach(elem => elem.addEventListener(toggleFn);
于 2021-03-15T12:24:46.243 回答