如何为所有按钮添加一个事件侦听器

ama*_*mto 2 javascript

如何向多个按钮添加事件侦听器,并根据单击的按钮获取每个按钮的值.例如:

<button id='but1'>
Button1
</button>
<button id='but2'>
Button2
</button>
<button id='but3'>
Button3
</button>
<button id='but4'>
Button4
</button>
Run Code Online (Sandbox Code Playgroud)

所以在javascript上,我不必像每个按钮那样引用:

Const but1 = document.getElementById('but1'); 
but1.addEventListener('click');
Run Code Online (Sandbox Code Playgroud)

Ada*_*zad 7

如果按钮没有通用类,您可以使用:

button[id^=but]
Run Code Online (Sandbox Code Playgroud)

选择 id 以短语开头的任何按钮but,因此它会转换为but*,其中 * 是通配符匹配。

button[id^=but]
Run Code Online (Sandbox Code Playgroud)
const btns = document.querySelectorAll('button[id^=but]')

btns.forEach(btn => {

   btn.addEventListener('click', event => {
        console.log( event.target.id );
   });

});
Run Code Online (Sandbox Code Playgroud)


Luc*_*ero 5

在这种情况下,您可以使用类而不是 id 来获取每个按钮。

<button class="btn">
Button1
</button>
<button class="btn">
Button2
</button>
<button class="btn">
Button3
</button>
<button class="btn">
Button4
</button>
Run Code Online (Sandbox Code Playgroud)

然后在 JS 中:

const buttons = document.querySelectorAll('.btn')
buttons.forEach(function(currentBtn){
  currentBtn.addEventListener('click', handleEvent)
})
Run Code Online (Sandbox Code Playgroud)

您只需遍历保存所有找到的按钮的 NodeList 的按钮常量。 阅读关于 document.querySelectorAll


Ali*_*ich 5

您实际上不需要为所有按钮添加侦听器.有一个在JS这样的事情冒泡和捕捉所以你可以用你所有的buttonsdiv和捕获所有的事件出现.但请确保检查点击是否在,button而不是在div.

const wrapper = document.getElementById('wrapper');

wrapper.addEventListener('click', (event) => {
  const isButton = event.target.nodeName === 'BUTTON';
  if (!isButton) {
    return;
  }

  console.dir(event.target.id);
})
Run Code Online (Sandbox Code Playgroud)
div {
  padding: 20px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div id='wrapper'>
  <button id='but1'>
  Button1
  </button>
  <button id='but2'>
  Button2
  </button>
  <button id='but3'>
  Button3
  </button>
  <button id='but4'>
  Button4
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)