Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JS. Не видит объект (https://javascript.ru/forum/misc/24322-js-ne-vidit-obekt.html)

stos 26.12.2011 11:21

JS. Не видит объект
 
Здравствуйте.
Надеюсь правильно озаглавил тему.
Итак, проблема такова. Есть функция, которая должна менять при клике фоновый цвет нужного tbody, а фоновый цвет всех остальных tbody делать прозрачными/белыми/неважно.
вот функция:
function show_products_marka(nid,nidmarka,m)
         {           
             for (i = 0; i < m; i++)
             {               
                 nbody = 'tbody_' + nid + '_' + i;               
                 if (i == nidmarka)
                 {
                     document.getElementById(nbody).style.backgroundColor = "#FFC4C4";
                 }
                 else
                 {                   
                     document.getElementById(nbody).style.backgroundColor = "#ffffff";
                 }
             }
         }


что самое интересное, вот этот кусок работает:
if (i == nidmarka)
     {
     document.getElementById(nbody).style.backgroundColor = "#FFC4C4";
     }


, а вот этот нет
document.getElementById(nbody).style.backgroundColor = "#ffffff";


И еще один момент.
Если принудительно на условие иначе прописать не переменную, а конкретное значение, то всё сработает, т.е.
document.getElementById('tbody_36_68').style.backgroundColor = "#ffffff";


спасибо..

B@rmaley.e><e 26.12.2011 11:46

Цитата:

Сообщение от stos
вот этот нет

Что значит "нет"? Какие ошибки выдаёт?

stos 26.12.2011 12:12

Цитата:

Сообщение от B@rmaley.e><e
Какие ошибки выдаёт?

Требуется объект

B@rmaley.e><e 26.12.2011 12:16

Значит, элемента с id=nbody не существует. Смотрите, на каком nbody оно падает и думайте, почему оно формирует такую строку.

stos 26.12.2011 13:28

Цитата:

Сообщение от B@rmaley.e><e
Значит, элемента с id=nbody не существует. Смотрите, на каком nbody оно падает и думайте, почему оно формирует такую строку.

так. уточню снова весьма важный момент!
если просто алертом выводить nbody, то всё путём, будут выданы все значения!!!
else
{					
   alert(nbody);
					
}

НО!, стоит изменить код на следующий
else
{					
   alert(document.getElementById(nbody).style.backgroundColor);					
}

и всё! всё стопарится на первом же else.

Да я уже голову сломал в догадках почему для if всё путём, а для else - не пашет.

GuardCat 26.12.2011 13:29

Возможно стоит проверить уникальность id в пределах страницы.

B@rmaley.e><e 26.12.2011 13:35

Вставьте внуть else
if(document.getElementById(nbody) == null) alert(nbody + ' doesnt exist');

stos 26.12.2011 13:49

Цитата:

Сообщение от B@rmaley.e><e
Вставьте внуть else
if(document.getElementById(nbody) == null) alert(nbody + ' doesnt exist');

вставил. выдало
tbody_01_0 doesnt exist
...
tbody_36_68 doesnt exist

ну т.е. все tbody кроме выбранного.
а почему оно нулл ?!

stos 26.12.2011 13:51

Цитата:

Сообщение от GuardCat
Возможно стоит проверить уникальность id в пределах страницы.

абсолютно уникально: строка "tbody_" + числа из двух разных массивов.
совпадение исключено, 100%.

B@rmaley.e><e 26.12.2011 13:56

Цитата:

Сообщение от stos
а почему оно нулл ?!

Потому что на момент срабатывания Вашей функции их нет в DOM дереве документа. Почему их там нет — надо спрашивать у Вас.

stos 26.12.2011 14:02

Цитата:

Сообщение от B@rmaley.e><e
Потому что на момент срабатывания Вашей функции их нет в DOM дереве документа.

так. но почему тогда функция срабатывает на условие if ?!

B@rmaley.e><e 26.12.2011 14:03

Каком условии?

stos 26.12.2011 14:09

Цитата:

Сообщение от stos (Сообщение 146109)
function show_products_marka(nid,nidmarka,m)
         {           
             for (i = 0; i < m; i++)
             {               
                 nbody = 'tbody_' + nid + '_' + i;               
                 if (i == nidmarka)
                 {
                     document.getElementById(nbody).style.backgroundColor = "#FFC4C4";
                 }
                 else
                 {                   
                     document.getElementById(nbody).style.backgroundColor = "#ffffff";
                 }
             }
         }

вот здесь.

stos 26.12.2011 14:11

Если бы ошибка выдавалась на if и на else, тогда - да, надо думать и искать. Но ведь на if - срабатывает и всё видит, и всё понимает, и всё правильно делает.

GuardCat 26.12.2011 14:13

Похоже, нужен весь код. По этому фрагменту непонятно, что не так. Можно только гадать. Например: невыбранный элемент не имеет идентификатора или он присвоен неверно.

stos 26.12.2011 14:21

Цитата:

Сообщение от GuardCat
Например: невыбранный элемент не имеет идентификатора или он присвоен неверно.

все идентификаторы присваиваются в цикле. И потому как на условие if функция срабатывает можно догадаться, что с идентификаторами и их присвоением всё нормально. В очередной раз посмотрел код уже сформированной страницы. Все идентификаторы впорядке.
<tbody style="background: #008000;" id='tbody_01_1'>
<tbody style="background: #008000;" id='tbody_01_2'>
<tbody style="background: #008000;" id='tbody_11_3'>
...
<tbody style="background: #008000;" id='tbody_36_68'>

вот код, который присваивает идентификаторы:
for ($marka = 0; $marka < $m; $marka++)
				{
					if ($cat2_tmp[$marka]["razdel"] == $cat1_tmp[$i]["id"] && $cat2_tmp[$marka]["q"] != 0)
					{
						echo "<tbody style=\"background: #008000;\" id='tbody_".$cat2_tmp[$marka]["razdel"]."_".$cat2_tmp[$marka]["idmarka"]."'>\n";
						for ($j = 0; $j < $ind; $j++)
						{
							if ($catalog[$j]["marka"] == $cat2_tmp[$marka]["name"])
							{
								if ($catalog[$j]["id"] != '')
								{
								    if ($catalog[$j]["id_razdel"] == $cat1_tmp[$i]["id"])
									{										
										echo "<tr>\n"; 
										 echo "<td align='center'>" . $catalog[$j]["id"] . "</td>";
										 echo "<td>" . $catalog[$j]["name"] . "</td>";
										 echo "<td align='center'>" . $catalog[$j]["firstprice"] . "</td>";
										 echo "<td align='center'>" . $catalog[$j]["ostatok"] . "</td>";
										 if ($cid == 4)
										 {
										 	echo "<td align='center'>" . $catalog[$j]["price6"] . "</td>";
										 }			
										 if ($cid == 3)
										 {
										 	echo "<td align='center'>" . $catalog[$j]["price5"] . "</td>";
										 }
										 if ($cid == 2)
										 {
										 	echo "<td align='center'>" . $catalog[$j]["price4"] . "</td>";
										 }
										 if ($cid == 1)
										 {
										 	echo "<td align='center'>" . $catalog[$j]["price3"] . "</td>";
										 }
										 if ($cid == 0)
										 {
										 	echo "<td align='center'>" . $catalog[$j]["price2"] . "</td>";
										 }
										 echo "<td align='center'>" . $catalog[$j]["garanty"] . "</td>\n";
							        	echo "</tr>\n";					
									}
								}
							}
						}
						echo "</tbody>\n";
					}
				}

B@rmaley.e><e 26.12.2011 14:33

Цитата:

Сообщение от stos
Но ведь на if - срабатывает и всё видит, и всё понимает, и всё правильно делает.

Что? Как из того, что для какого-то i условие выполняется, следует, что для другого i будет существовать элемент с id=nbody?

stos 26.12.2011 14:36

твою мать.
дело в кавычках.

жээээээсть. прость жэсть.

stos 26.12.2011 14:38

Цитата:

Сообщение от B@rmaley.e><e
Как из того, что для какого-то i условие выполняется, следует, что для другого i будет существовать элемент с id=nbody?

ммм... ну какбе элементарно. карандаш, бумага.
выписываем все ИД, и расписываем весь цикл на бумаге и проверяем пошагово.
ну и, само собой, исходный код сформированной страницы смотрим.

stos 26.12.2011 14:39

echo "<tbody style=\"background: #008000;\" id='tbody_".$cat2_tmp[$marka]["razdel"]."_".$cat2_tmp[$marka]["idmarka"]."'>\n";

заменил на
echo "<tbody style=\"background: #008000;\" id=\"tbody_".$cat2_tmp[$marka]["razdel"]."_".$cat2_tmp[$marka]["idmarka"]."\">\n";


и всё работает..

всем спасибо...за то что не остались равнодушными...

stos 26.12.2011 15:44

извиняюсь за...междометия :)
просто слегка на эмоциях был :)


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