Вернуться идентификатор кнопки при нажатии - JavaScript
Я делаю программу, которая должна сделать столбец кнопок при загрузке. После этого по нажатию должен появиться новый столбец кнопок и отобразиться идентификатор кнопки, по которой вы нажали.
Он отлично работает, когда предполагается создать новый столбец кнопок, но отображает идентификатор каждой кнопки в столбце. Он даже возвращает мне идентификаторы следующего столбца. Идентификаторы столбцов первой кнопки отображаются при загрузке.
Может ли кто-нибудь помочь мне сделать так, чтобы он отображал только идентификатор нажатой кнопки. Вот код:
<html> <head>
<style>
.addItem {
width: 80px;
float: left;} </style>
<script>
var lev = 0; var levmax=5;var some;
function addBu(){
repeat();
};
function repeat(){
if(lev<levmax){
lev++;
var bo = document.getElementById("kod");
var di = document.createElement('DIV');
di.className="addItem";
for (var i=0; i<4; i++){
var bu= document.createElement('BUTTON');
var te = document.createTextNode('Text');
var te1 = document.createTextNode(lev.toString());
var br = document.createElement('BR');
bu.id=(lev*10+i).toString();
some=(lev*10+i).toString();
bu.addEventListener("click", repeat);
bu.addEventListener("click" , reply_clickk(some));
bu.appendChild(te);
bu.appendChild(te1);
di.appendChild(bu);
di.appendChild(br);
}
bo.insertBefore(di, bo.childNodes[0]);
}
function reply_clickk(clicked_id){
alert(clicked_id);
};
};
</script>
</head>
<body id="kod" onload="addBu()">
</body></html>
3 ответа
Проблема в том, что вы вызываете обработчик события и присоединяете его возвращаемое значение к событию click вместо функции.
bu.addEventListener("click" , reply_clickk(some));
Вы, вероятно, скорее хотите что-то подобное
bu.addEventListener("click" , function(e){reply_clickk(e.target.id)});
Кроме того, ваш some
переменная является глобальной; измените это на var some
быть сфокусированным на вашей функции repeat
var some=(lev*10+i).toString();
Смотрите JSFiddle
You have to use a closure to keep the button id
Рабочий код
var lev = 0;
var levmax = 5;
var some;
function addBu() {
repeat();
};
function reply_clickk(clicked_id) {
alert(clicked_id);
};
function repeat() {
if (lev < levmax) {
lev++;
var bo = document.getElementById("kod");
var di = document.createElement('DIV');
di.className = "addItem";
for (var i = 0; i < 4; i++) {
var bu = document.createElement('BUTTON');
var te = document.createTextNode('Text');
var te1 = document.createTextNode(lev.toString());
var br = document.createElement('BR');
bu.id = (lev * 10 + i).toString();
some = (lev * 10 + i).toString();
bu.addEventListener("click", repeat);
bu.addEventListener("click", function(some) {
return function() {
reply_clickk(some)
}
}(some));
bu.appendChild(te);
bu.appendChild(te1);
di.appendChild(bu);
di.appendChild(br);
}
bo.insertBefore(di, bo.childNodes[0]);
}
};
.addItem {
width: 80px;
float: left;
}
<body id="kod" onload="addBu()">
</body>
Вы хотите добавить слушателя так:
bu.addEventListener("click" , reply_clickk(some));
К несчастью, reply_clickk(some)
это вызов функции, который возвращает undefined
, Вы должны отложить вызов функции, т.е. вернуть другую функцию:
function reply_clickk(clicked_id){
return function () {
alert(clicked_id);
};
};