Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2009, 16:08
Аватар для keysi_
Интересующийся
Отправить личное сообщение для keysi_ Посмотреть профиль Найти все сообщения от keysi_
 
Регистрация: 29.04.2009
Сообщений: 22

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

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

Последний раз редактировалось keysi_, 14.05.2009 в 16:14.
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2009, 16:25
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

document.getElementById(level).style.visibility

элемента не нашло, вот и ругаеццо.
var al=document.getElementById(level);
if (!al) return null;
if (al.style.visibility=='visible'){al.style.visibility = 'hidden'}
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2009, 16:26
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

function hL(level) {
	var el = document.getElementById(level);
	if (el && el.style.visibility == 'visible')
		el.style.visibility = 'hidden';
}
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2009, 16:40
Аватар для keysi_
Интересующийся
Отправить личное сообщение для keysi_ Посмотреть профиль Найти все сообщения от keysi_
 
Регистрация: 29.04.2009
Сообщений: 22

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить несколько мат. задач в javascript 4_omd Общие вопросы Javascript 5 02.05.2009 12:02
Помогите решить задачку---Найти сумму элементов массива uniQ Общие вопросы Javascript 3 02.05.2009 01:20
Помогите с заголовочной чстью greatilya Элементы интерфейса 1 12.01.2009 15:59
Привязка картинки к углу ячейки таблицы! Помогите с кодом! Alexofer Общие вопросы Javascript 6 31.12.2008 00:14
Помогите решить задачу vkg Общие вопросы Javascript 1 20.02.2008 11:59