Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Перебор большого числа ячеек (https://javascript.ru/forum/dom-window/3602-perebor-bolshogo-chisla-yacheek.html)

Dimanoid 06.05.2009 14:36

Перебор большого числа ячеек
 
Вложений: 1
Здраствуйте. У меня вот какая проблема:
Есть таблица 20х20 (400 ячеек), каждая ячейка имеет уникальный id-номер (начиная с 0101 и заканчивая 2020). Мне необходимо каждой ячейке присвоить случайно один из 4 цветов. Написал небольшой скриптик, который должен это делать. Но почему-то он перестает работать на 198 (примерно :)) ячейке (имеет id='1010') (ее уже не раскрашивает) и дальше не раскрашивает их. Не подскажете, в чем дело? Проверяю в двух браузерах: IE8 и Google Chrome 2. Нигде не работает :(
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<head>
	<title>Волчий остров</title>
	<meta http-equiv="content-type"content="text/html;charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="style.css" />
	<script type="text/javascript">
    pusto = "black"
	krolik = "green"
	volk = "yellow"
	volchica = "red"
	function zaselenie()
{
	var tr = 1
	var td = 1
	for(i=1;i<=400;i++)
	{
		if(td<=9)
		{
			tdForZas = "0" + td
		}
		else 
		{
			tdForZas = td
		}
		if(tr<=9)
		{
			trForZas = "0" + tr
		}
		else
		{
			trForZas = tr
		}
		jivotnoe = Math.floor(Math.random() * 4)
		if(jivotnoe == 0) document.getElementById(trForZas + tdForZas).style.backgroundColor = pusto
		if(jivotnoe == 1) document.getElementById(trForZas + tdForZas).style.backgroundColor = krolik
		if(jivotnoe == 2) document.getElementById(trForZas + tdForZas).style.backgroundColor = volk
		if(jivotnoe == 3) document.getElementById(trForZas + tdForZas).style.backgroundColor = volchica
		td++
		if(td>20)
		{
			td = 1
			tr++
		}		
	}
}

	</script>
</head>

<body onload="zaselenie()">
<table cellspacing="0">
	<tr>
		<td id='0101'></td>
		<td id='0102'></td>
		<td id='0103'></td>
		<td id='0104'></td>
		<td id='0105'></td>
		<td id='0106'></td>
		<td id='0107'></td>
		<td id='0108'></td>
		<td id='0109'></td>
		<td id='0110'></td>
		<td id='0111'></td>
		<td id='0112'></td>
		<td id='0113'></td>
		<td id='0114'></td>
		<td id='0115'></td>
		<td id='0116'></td>
		<td id='0117'></td>
		<td id='0118'></td>
		<td id='0119'></td>
		<td id='0120'></td>
	</tr>
         ........................... <!-- Здесь пропускаю, т.к. очень длинно. По аналогии идет до id='1920' -->
	<tr>
		<td id='2001'></td>
		<td id='2002'></td>
		<td id='2003'></td>
		<td id='2004'></td>
		<td id='2005'></td>
		<td id='2006'></td>
		<td id='2007'></td>
		<td id='2008'></td>
		<td id='2009'></td>
		<td id='2010'></td>
		<td id='2011'></td>
		<td id='2012'></td>
		<td id='2013'></td>
		<td id='2014'></td>
		<td id='2015'></td>
		<td id='2016'></td>
		<td id='2017'></td>
		<td id='2018'></td>
		<td id='2019'></td>
		<td id='2020'></td>
	</tr>
</table>
</body>
</html>

Приложил в аттаче html+css.
Спасибо за помощь!

ЗЫ Извините, если уже был похожий вопрос - не нашел.

x-yuri 06.05.2009 14:51

а если написать
...
        jivotnoe = Math.floor(Math.random() * 4)
console.log(trForZas + tdForZas);
        if(jivotnoe == 0) document.getElementById(trForZas + tdForZas).style.backgroundColor = pusto
...

то что пишется в консоли firebug?

Dimanoid 06.05.2009 14:58

Не знаю, что там пишется ))) Нету у меня такого. Отладка Javascript в Хроме пишет это:
.................................................. ....
if(jivotnoe == 0) document.getElementById(trForZas + tdForZas).style.backgroundColor = "black"
Uncaught TypeError: Cannot read property 'style' of null
if(jivotnoe == 1) document.getElementById(trForZas + tdForZas).style.backgroundColor = "green"
.................................................. ....

Kolyaj 06.05.2009 15:00

Цитата:

Сообщение от Dimanoid
tdForZas = "0" + td

tdForZas -- строка.

Цитата:

Сообщение от Dimanoid
tdForZas = td

tdForZas -- число.

Dimanoid 06.05.2009 15:02

А это имеет значение? Ведь я с ними никаких операций не провожу. И как мне объявить их строкой тогда и передать им значение из int в string?

UPD
До меня кажется доходит :) Может JS воспринимать это: "trForZas + tdForZas" как сложение чисел а не как слияние в одно? И как это исправить тогда?

UPD2
ЕЕЕЕ!!! Я сделал это! )) Вот исправление:
if(td<=9)
		{
			tdForZas = "0" + td
		}
		else 
		{
			tdForZas = "" + td
		}
		if(tr<=9)
		{
			trForZas = "0" + tr
		}
		else
		{
			trForZas = "" + tr
		}

Добавление пустой строки в ELSE. Спасибо всем за помощь ))

Kolyaj 06.05.2009 15:06

Самое простое вместо
if(td<=9)
        {
            tdForZas = "0" + td
        }
        else 
        {
            tdForZas = td
        }

tdForZas = (td < 10 ? '0' : '') + td;

ZoNT 06.05.2009 15:13

Не забываем, что айдишки не должны начинаться с числа...

Dimanoid 06.05.2009 15:20

ZoNT
Я искал правила для id - не нашел. Просто если будет не только число, то будет неудобно. А так браузеры понимают :)

Kolyaj 06.05.2009 15:22

Цитата:

Сообщение от Dimanoid
А так браузеры понимают

Во всех тестировал?

Dimanoid 06.05.2009 15:30

Kolyaj
IE8 и Chrome.


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