我已经习惯了jQuery,这让我很难受。
我想用javascript将更多元素绑定到同一个onlick
。这只绑定了第一个项目,我尝试了querySelectorAll
,它不会绑定任何一个。
<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');
}
答案 0 :(得分:2)
试试这个
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");
}
})
答案 1 :(得分:1)
有几种方法可以做到这一点。
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);
}
});
适用于所有主流浏览器,因为支持HTMLElement.dataset
的IE11,您可以使用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));
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);
}
[data-overlay]
元素都在下,您可以使用最高的已知祖先同一个父母(或祖父母),你可以将事件绑定到那个。addEventListener
而非.onclick
的方式,使用事件属性被认为是一种不好的做法,因为即使您想要({{1}也无法添加多个函数没有这样的限制)。