Как вставить в аргумент функции текущее значение переменной?
Есть пример:
for(var i = 0, h; i < 3; i++)
{
h = document.createElement("button");
h.innerHTML = "alert = " + i;
h.onclick = function(){ alert(i); };
document.body.appendChild(h);
}
Надо чтобы по клику кнопки в сообщении выдавалось значение переменной "i" на момент назначения обработчика клика (0, 1, 2), но все кнопки, естественно, выдают конечное значение "i", равное "3". Как решить такую задачу? |
Лучше функцию вынести отдельно, чтобы не создавать каждый раз новую.
var onClick = function(i) {
alert(i);
};
for(var i = 0, h; i < 3; i++)
{
h = document.createElement("button");
h.innerHTML = "alert = " + i;
h.onclick = onClick.bind(h, i);
document.body.appendChild(h);
}
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<script type='text/javascript'>
for(var i = 0, h; i < 3; i++){
h = document.createElement("button");
h.innerHTML = "alert = " + i;
h.onclick = (function (N){
return function(){ alert(N); };
})(i)
document.body.appendChild(h);
};
</script>
</body>
</html>
|
Цитата:
Про "bind" ничего не знал. Спасибо! |
Цитата:
|
Цитата:
|
polinin,
Делегирование событий |
Цитата:
|
| Часовой пояс GMT +3, время: 11:44. |