Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2009, 14:36
Интересующийся
Отправить личное сообщение для Dimanoid Посмотреть профиль Найти все сообщения от Dimanoid
 
Регистрация: 06.05.2009
Сообщений: 18

Перебор большого числа ячеек
Здраствуйте. У меня вот какая проблема:
Есть таблица 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.
Спасибо за помощь!

ЗЫ Извините, если уже был похожий вопрос - не нашел.
Вложения:
Тип файла: zip Ostrov.zip (2.0 Кб, 2 просмотров)

Последний раз редактировалось Dimanoid, 06.05.2009 в 14:45.
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2009, 14:51
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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

то что пишется в консоли firebug?
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2009, 14:58
Интересующийся
Отправить личное сообщение для Dimanoid Посмотреть профиль Найти все сообщения от Dimanoid
 
Регистрация: 06.05.2009
Сообщений: 18

Не знаю, что там пишется ))) Нету у меня такого. Отладка 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"
.................................................. ....
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2009, 15:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dimanoid
tdForZas = "0" + td
tdForZas -- строка.

Сообщение от Dimanoid
tdForZas = td
tdForZas -- число.
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2009, 15:02
Интересующийся
Отправить личное сообщение для Dimanoid Посмотреть профиль Найти все сообщения от Dimanoid
 
Регистрация: 06.05.2009
Сообщений: 18

А это имеет значение? Ведь я с ними никаких операций не провожу. И как мне объявить их строкой тогда и передать им значение из 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. Спасибо всем за помощь ))

Последний раз редактировалось Dimanoid, 06.05.2009 в 15:06.
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2009, 15:06
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

tdForZas = (td < 10 ? '0' : '') + td;
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2009, 15:13
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Не забываем, что айдишки не должны начинаться с числа...
Ответить с цитированием
  #8 (permalink)  
Старый 06.05.2009, 15:20
Интересующийся
Отправить личное сообщение для Dimanoid Посмотреть профиль Найти все сообщения от Dimanoid
 
Регистрация: 06.05.2009
Сообщений: 18

ZoNT
Я искал правила для id - не нашел. Просто если будет не только число, то будет неудобно. А так браузеры понимают
Ответить с цитированием
  #9 (permalink)  
Старый 06.05.2009, 15:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dimanoid
А так браузеры понимают
Во всех тестировал?
Ответить с цитированием
  #10 (permalink)  
Старый 06.05.2009, 15:30
Интересующийся
Отправить личное сообщение для Dimanoid Посмотреть профиль Найти все сообщения от Dimanoid
 
Регистрация: 06.05.2009
Сообщений: 18

Kolyaj
IE8 и Chrome.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск