Вот что мне спело средство разработки в опере на мой скрипт:
Код:
|
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)" загонять в переменную, то он начинает выдавать такую же ошибку еще на моменте присвоения.