Вот исправление с использованием атрибутов data-*
:
for (var i = 1; i <= 2; i++) {
for (var j = 1; j <= 3; j++) {
var buttonId = "especifica-" + i + "-p" + j;
var button = document.getElementById(buttonId);
button.setAttribute("data-i", i);
button.setAttribute("data-j", j);
button.addEventListener("click", function(event) {
console.log("i", event.target.getAttribute("data-i"));
console.log("j", event.target.getAttribute("data-j"));
console.log("button with id of", event.target.id, "was clicked!");
});
}
}
<div><button id="especifica-1-p1" type="button">especifica-1-p1</button></div>
<div><button id="especifica-1-p2" type="button">especifica-1-p2</button></div>
<div><button id="especifica-1-p3" type="button">especifica-1-p3</button></div>
<div><button id="especifica-2-p1" type="button">especifica-2-p1</button></div>
<div><button id="especifica-2-p2" type="button">especifica-2-p2</button></div>
<div><button id="especifica-2-p3" type="button">especifica-2-p3</button></div>
Подробнее об атрибутах data-*
можно узнать здесь:
В качестве альтернативы вы можете воспользоваться концепцией closures
, как в следующем примере:
for (var i = 1; i <= 2; i++) {
for (var j = 1; j <= 3; j++) {
var buttonId = "especifica-" + i + "-p" + j;
var button = document.getElementById(buttonId);
var createEventListener = function (iValue, jValue) {
return function (event) {
console.log("i:", iValue, "j:", jValue);
console.log("button with id of", event.target.id, "was clicked!");
}
};
button.addEventListener("click", createEventListener(i, j));
}
}
<div><button id="especifica-1-p1" type="button">especifica-1-p1</button></div>
<div><button id="especifica-1-p2" type="button">especifica-1-p2</button></div>
<div><button id="especifica-1-p3" type="button">especifica-1-p3</button></div>
<div><button id="especifica-2-p1" type="button">especifica-2-p1</button></div>
<div><button id="especifica-2-p2" type="button">especifica-2-p2</button></div>
<div><button id="especifica-2-p3" type="button">especifica-2-p3</button></div>
Подробнее о closures
здесь:
Также используйте метод element.addEventListener
вместо element.onclick
. Посмотрите здесь, почему лучше использовать addEventListener('click', ...)
вместо onclick
: