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

IT技术 javascript dom
2021-02-06 14:49:39

示例 1:

element1.addEventListener("input", function() {
this function does stuff 
});

示例 2:

element1 && element2.addEventListener("input", function() {
this function does stuff
});

它在语法上可能不正确,但是有没有一种方法可以同时(同一行)为两个元素提供相同的事件侦听器,而不必将它们分开?

6个回答

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

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

elementsArray.forEach(function(elem) {
    elem.addEventListener("input", function() {
        //this function does stuff
    });
});
你对“单行”的定义是什么?通过删除换行符,任何 JS 程序都可以写在一行上。
2021-03-20 14:49:39
你不能得到一个清单,document.getElementsByTagName()嗯?我试过了,但没有用 - 我不得不使用querySelectorAll. 不过为此感谢,它对我有用!
2021-03-22 14:49:39
这对我不起作用......我在数组中有元素并且我在每个元素上附加了“点击”侦听器但是当我点击它时事件永远不会触发!
2021-03-23 14:49:39
如果您使用 ES6,则可能: elementsArray.forEach(el => el.addEventListener('input', functionThatDoesStuff))
2021-03-24 14:49:39
哦,我希望它可以在一行中完成。不过我很欣赏这个答案
2021-04-07 14:49:39

事件冒泡是javascript中的重要概念,所以如果可以直接在DOM上添加事件,可以节省一些代码行,不需要循环:

document.addEventListener('click', function(e){
  if(e.target.tagName=="BUTTON"){
   alert('BUTTON CLICKED');
  }
})
如果您动态创建 DOM 元素,这是一个很好的技术,因为您不需要在用户交互中添加 eventListeners。
2021-03-31 14:49:39

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

[ Element1, Element2 ].forEach(function(element) {
   element.addEventListener("input", function() {
      this function does stuff
   });
});
例如,当元素指向不同的 id 时,我认为这是一个非常有用的解决方案
2021-03-30 14:49:39

一条线

document.querySelectorAll("whatever").forEach(elem => elem.addEventListener("input", fn))

我不能为此解决方案申请功劳,但我在这里找到了一个很好的解决方案。

https://www.kirupa.com/html5/handling_events_for_many_elements.htm

    var theParent = document.querySelector("#theDude");
    theParent.addEventListener("click", doSomething, false);

    function doSomething(e) {
        if (e.target !== e.currentTarget) {
            var clickedItem = e.target.id;
            alert("Hello " + clickedItem);
        }
        e.stopPropagation();
    }