页面上有N个按钮,我需要找到点击的按钮。到目前为止,我有这个代码,它将显示按钮的数量,而不是按钮顺序:
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', function() {
console.log('You clicked element #' + );
});
}
答案 0 :(得分:2)
您需要创建一个闭包或使用bind
,因为i
的值在您实际点击之前和点击处理程序查找{{1}的值之前已经达到了最终值}}:
i
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', function(i) {
console.log('You clicked element #' + i);
}.bind(null, i));
}
将创建一个当前值为bind
的函数的副本,因此如果i
在下一次迭代时发生更改,则不会造成任何损害。
答案 1 :(得分:2)
如果我理解你的问题,我现在不能解决你的问题吗?
var nodes = document.getElementsByTagName('button');
for (var i = 0, size = nodes.length; i < size; i++) {
nodes[i].addEventListener('click', function(i) {
console.log('You clicked element index' + i);
}.bind(null, i));
}
jsbin:https://jsbin.com/podicumeha/1/edit?html,console,output
答案 2 :(得分:1)
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', function(index) {
console.log('You clicked element index' + index);
}.bind(this, i));
}