Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите решить проблему (https://javascript.ru/forum/misc/3692-pomogite-reshit-problemu.html)

keysi_ 14.05.2009 16:08

Помогите решить проблему
 
Вот что мне спело средство разработки в опере на мой скрипт:

Код:

ecmascript
http://mysite.ru/
Timeout thread: delay 100 ms
Error:
name: TypeError
message: Statement on line 11: Cannot convert undefined or null to Object
Backtrace:
  Line 11 of linked script http://mysite.ru/catmenu.js: In function hL
    document.getElementById(level).style.visibility = 'hidden';
  Line 1 of unknown script
    hL("cm_lev2_15")

stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

вот скрипт (прячет элементы через css):
timer_mod=100;
function hL(level)
{
var al=document.getElementById(level).style.visibility;
if (al=='visible')
{
document.getElementById(level).style.visibility = 'hidden';
}
}

// тут я запускаю код чтобы он закрыл все отрытые элементы
//кстати тоже не знаю как как сделать, чобы код выполнялся не до i<20 , а пока не закончатся cm_lev2_+'i'
for (i=1;i<20;i++)
 {
  setTimeout('hL("cm_lev2_'+i+'")', timer_mod);
 }


При всем при этом скрипт работает нормально, просто понадобилось валидность привести в порядок.
Я предполагаю, что он матерится на несуществующий объект c "ID такимто" но понятия не имею как запретить дальнейшее выполнения скрипта если "id такойто" не существует.
В пхп это например делается функцией isset(), но здесь как это сделать я не знаю, причем если "document.getElementById(level)" загонять в переменную, то он начинает выдавать такую же ошибку еще на моменте присвоения.

e1f 14.05.2009 16:25

document.getElementById(level).style.visibility

элемента не нашло, вот и ругаеццо.
var al=document.getElementById(level);
if (!al) return null;
if (al.style.visibility=='visible'){al.style.visibility = 'hidden'}

Riim 14.05.2009 16:26

Цитата:

Сообщение от keysi_
Я предполагаю, что он матерится на несуществующий объект c "ID такимто"

Может не существовать т. к. еще не загрузился.

function hL(level) {
	var el = document.getElementById(level);
	if (el && el.style.visibility == 'visible')
		el.style.visibility = 'hidden';
}

keysi_ 14.05.2009 16:40

Блин, как все просто оказывается!
При много благодарен, все работает!


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