示例1:
element1.addEventListener("input", function() {
// this function does stuff
});
示例2:
element1 && element2.addEventListener("input", function() {
// this function does stuff
});
语法可能不正确,但我是否可以在同一行上同时为两个元素提供相同的事件侦听器(而不必将它们分开编写)?
示例1:
element1.addEventListener("input", function() {
// this function does stuff
});
示例2:
element1 && element2.addEventListener("input", function() {
// this function does stuff
});
语法可能不正确,但我是否可以在同一行上同时为两个元素提供相同的事件侦听器(而不必将它们分开编写)?
let elementsArray = document.querySelectorAll("whatever");
elementsArray.forEach(function(elem) {
elem.addEventListener("input", function() {
// This function does stuff
});
});
elementsArray.forEach(el => el.addEventListener('input', functionThatDoesStuff))
。该代码会给elementsArray
数组中的每个元素添加一个input
事件监听器,并在触发事件时调用functionThatDoesStuff
函数。 - GMaiolodocument.getElementsByTagName()
获取列表,是吗?我尝试过了,但它不起作用 - 我必须使用 querySelectorAll
。非常感谢您的帮助,这对我很有用! - BruceWayne事件冒泡是javascript中的重要概念,因此如果您可以直接在DOM上添加事件,则可以节省一些代码行,无需循环:
document.addEventListener('click', function(e){
if(e.target.tagName=="BUTTON"){
alert('BUTTON CLICKED');
}
})
如果您不想定义一个单独的elementsArray变量,您可以从一个未命名的数组中调用forEach并提供两个元素。
[ Element1, Element2 ].forEach(function(element) {
element.addEventListener("input", function() {
this function does stuff
});
});
一行
document.querySelectorAll("whatever").forEach(elem => elem.addEventListener("input", fn))
我一直推荐委派 - 如果输入在同一个容器中,那么您可以这样做
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)
});
});
<div id="inputContainer">
<h1>Start typing or paste</h1>
<input id="element1">
<input id="element2">
</div>
我不能为这个解决方案拍胸脯,但我在这里找到了一个很好的解决方案。
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();
}
let all_btn = document.querySelectorAll("button");
all_btn.forEach(function(btn) {
btn.addEventListener("click", function() {
console.log(this.innerHTML + " is clicked")
});
});
// one line code
// let all_btn=document.querySelectorAll("button");all_btn.forEach(function(n){n.addEventListener("click",function(){console.log(this.innerHTML+" is clicked")})});
<button>button 1</button>
<button>button 2</button>
<button>button 3</button>
let buttons = document.getElementsByClassName('className');
for(let i = 0; i<buttons.length; i++){
buttons[i].addEventListener('click', () => {
/*put your code here*/
});
}
例子:
const element1 = document.querySelector("#element1");
const element2 = document.querySelector("#element2");
[element1, element2].map(element => element.addEventListener("click", function() {
/*some expressions :)*/
}))
您可以使用点击事件对象的路径键向多个元素添加事件侦听器。
document.addEventListener('click', function(e){
//e.path[0].id;
//e.path[0].tagName;
//e.path[0].className;
if(e.path[0].className==="my-element"){
console.log("clicked");
}
})