如何将addeventlistener添加到一行中的多个元素

Jam*_*sco 47 javascript methods dom

例1

Element1.addEventListener ("input", function() {
this function does stuff 
});
Run Code Online (Sandbox Code Playgroud)

例2

Element1 && Element2.addEventListener("input", function() {
this function does stuff
});
Run Code Online (Sandbox Code Playgroud)

它可能在语法上不正确,但是有没有办法可以同时给两个元素同一个Dom方法(同一行)而不必将它们分开?

GMa*_*olo 78

好吧,如果你有一个包含你可以做的元素的数组:

let elementsArray = document.querySelectorAll("whatever");

elementsArray.forEach(function(elem) {
    elem.addEventListener("input", function() {
        //this function does stuff
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 你对"单行"的定义是什么?任何JS程序都可以通过删除换行符写在一行上. (15认同)
  • 如果你使用ES6那么它是可能的:`elementsArray.forEach(el => el.addEventListener('input',functionThatDoesStuff))` (7认同)
  • 哦,我希望它可以在一行中完成.不过我很欣赏答案 (2认同)
  • 这对我不起作用...我在数组中获取了元素,并且在每个元素上附加了“单击”侦听器,但是当我单击它时,事件永远不会触发! (2认同)

Ayu*_*rma 19

事件冒泡是javascript中的重要概念,因此如果您可以直接在DOM上添加事件,则可以保存一些代码行,无需循环:

document.addEventListener('click', function(e){
  if(e.target.tagName=="BUTTON"){
   alert('BUTTON CLICKED');
  }
})
Run Code Online (Sandbox Code Playgroud)

  • 如果您动态创建 DOM 元素,这是一项很好的技术,因为您不需要在用户交互时添加事件监听器。 (3认同)

Adr*_*ian 15

一条线

document.querySelectorAll("whatever").forEach(elem => elem.addEventListener("input", fn))
Run Code Online (Sandbox Code Playgroud)

  • @VitaliyTerziev你是对的,我的回答有点愤世嫉俗……总是可以将所有内容放在“一行”中,但通常没有用。 (2认同)

小智 11

如果您不想定义单独的elementsArray变量,则可以从具有两个元素的未命名数组中调用forEach。

[ Element1, Element2 ].forEach(function(element) {
   element.addEventListener("input", function() {
      this function does stuff
   });
});
Run Code Online (Sandbox Code Playgroud)

  • 例如,当元素指向不同的 id 时,我认为这是一个非常有用的解决方案 (2认同)
  • 很好,我一直在寻找 (2认同)

mpl*_*jan 5

我总是建议委托 - 如果输入位于同一个容器中,那么你可以这样做

window.addEventListener("DOMContentLoaded", function() { // on page load
  document.getElementById("inputContainer").addEventListener("input", function(e) { // passing the event
    const tgt = e.target;
    const id = tgt.id;
    console.log("You typed in",id)
  });
});
Run Code Online (Sandbox Code Playgroud)
<div id="inputContainer">
  <h1>Start typing or paste</h1>
  <input id="element1">
  <input id="element2">
</div>
Run Code Online (Sandbox Code Playgroud)