将多个元素绑定到同一onclick
Bind more then one element to the same onclick
我太习惯jQuery了,我做不到这一点很可怕。
我想用javascript将更多的元素绑定到同一个onlick
。这只绑定了第一个项目,我尝试了querySelectorAll
,它不会绑定它们中的任何一个。
jsfiddle
<div data-overlay></div>
<div data-overlay></div>
<div data-overlay></div>
<div data-overlay></div>
document.querySelector('[data-overlay]').onclick = function() {
console.log('I'm clicked');
}
尝试这个
var elements = document.querySelectorAll('[data-overlay]')
var elementArray = Array.prototype.slice.call( elements );
elementArray .forEach(function(element){
element.onclick = function() {
console.log("I'm clicked");
}
})
有几种方法可以做到这一点。
"可能是最棒的"——也就是活动代表团
var handler = function(event) {
console.log("I'm clicked");
};
// Register an event on the body, all clicks on the document are captured.
document.body.addEventListener('click', function(event) {
// Check if the click occurred on an element we care about
if (event.target.dataset.overlay !== undefined) {
// Call the handler if it is.
handler.call(this, event);
}
});
适用于所有主流浏览器,因为IE11支持HTMLElement.dataset
,所以您可能可以使用getAttribute
来获得早期支持。
现代
var handler = () => {
console.log("I'm clicked");
};
// This line makes it work in older versions of modern browsers.
NodeList.prototype[Symbol.iterator] = NodeList.prototype[Symbol.iterator]
|| Array.prototype[Symbol.iterator];
for (let el of document.querySelectorAll('[data-overlay]')) {
el.addEventListener('click', handler);
}
稍微不那么现代
var handler = () => {
console.log("I'm clicked");
};
[].forEach.call(document.querySelectorAll('[data-overlay]'), el =>
el.addEventListener('click', handler));
"我需要支持internet explorer"
var handler = function() { console.log("I'm clicked"); };
var elements = document.querySelectorAll('[data-overlay]');
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', handler);
}
- 请注意,如果您有许多匹配的元素(数百个),或者匹配的元素可以在任何给定时间从DOM中出现和消失,那么Event Delegation的效果最好
- 请注意,使用Event Delegation,您不必将事件绑定在主体上,您可以使用已知的最高祖先,如果所有
[data-overlay]
元素都在同一父级(或祖父母级)下,则可以将事件绑定到该父级 - 请注意我是如何使用
addEventListener
而不是.onclick
的,使用事件属性被认为是一种糟糕的做法,因为即使您想添加多个函数,也不能添加多个(addEventListener
没有这样的限制)
相关文章:
- 在React中,为什么我必须绑定onClick函数而不是调用它
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 使用JavaScript将onclick事件与参数绑定
- 将多个元素绑定到同一onclick
- 对触发其onclick功能的按钮进行键绑定
- html+jquery(绑定onclick事件以执行onclick之前的操作)
- 对克隆的image元素绑定onclick事件
- 如果父项具有onclick绑定,则复选框单击将被忽略
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- 将列表元素 onclick 事件绑定到单选输入
- 如何将新函数绑定到元素的 onclick 事件,并使其在所有其他绑定函数之前运行
- 解绑,然后将 OnClick 函数(带有动态参数)绑定到 jQuery 或 JavaScript 中继器中的锚标记
- 绑定一个 onclick 函数,对象作为在循环中创建的锚标记上的参数
- 在 onClick 事件上调用函数时使用绑定
- 挖空点击绑定:onClick vs. onClick()
- 在点击此链接后,获取绑定到锚链接的 onclick 函数内的 URL/锚点
- 将按钮onclick事件绑定到Backbone View
- jQuery:将 onClick 绑定到指向其他页面的所有锚点,目标=_self
- 正确的方式onClick绑定在按钮
- 防止 JavaScript OnClick 绑定 confirm() 覆盖 VB.NET Click 处理程序