Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Динамическое формирование таблицы (https://javascript.ru/forum/dom-window/5021-dinamicheskoe-formirovanie-tablicy.html)

otstoy 09.09.2009 11:09

Динамическое формирование таблицы
 
Всем добрый день. Есть вот такой код:

<html>
<head>
</head>
<body>
<script language="JavaScript" type="text/javascript">
function createelem(tag, id, elem){
var el=document.createElement(tag);
el.id=id;
if(elem) elem.appendChild(el);
return el;
}
function createtn(str, elem){
var tn=document.createTextNode(str);
if(elem) elem.appendChild(tn);
return tn;
}
var i, j, tbl, th, tb, tr, td;
tbl=createelem("table", "", document.body);
th=createelem("thead", "", tbl);
tb=createelem("tbody", "", tbl);
for(i=0; i<5; i++){
  tr=createelem("tr", "", tb);
  for(j=0; j<5; j++){
    td=createelem("td", "", tr);
    td.style.background="green";
    td.onclick=function(){alert(i+""+j);}
    createtn(i+""+j, td);
  }
}
i=8; j=8;
</script>
</body>
</html>


Он динамически строит таблицу. Вопрос вот какой. Как изменить строку:

td.onclick=function(){alert(i+""+j);}


чтобы i и j воспринимались браузером как значения переменных, а не сами переменные. Т.е надо, чтобы при клике по нулевой ячейке нулевой строки формировалось 00, при клике по первой ячейке нулевой строки формировалось 01 и т.д., а не последние значения i и j (в данном случае 88).

Octane 09.09.2009 11:23

Наверное в этом проблема:
td.onclick=function(){alert(i+""+j);}


Почитайте про замыкания

td.onclick = function(i, j) {
       return function(){alert(i+""+j);};
}(i, j);

otstoy 09.09.2009 12:09

Большое спасибо! Сам бы в век не допер...


Часовой пояс GMT +3, время: 08:37.