Система меню должна расширяться и сворачиваться в соответствии с заданной задержкой, используя следующие операторы (o_item.getprop('hide_delay')
возвращает 200 и o_item.getprop('expd_delay')
возвращает 0):
this.o_showtimer = setTimeout('A_MENUS['+ this.n_id +'].expand(' + n_id + ');',
o_item.getprop('expd_delay'));
и
this.o_hidetimer = setTimeout('A_MENUS['+ this.n_id +'].collapse();',
o_item.getprop('hide_delay'));
Я попытался поместить код для первого аргумента в отдельные функции и вызвать эти функции в качестве первого аргумента для setTimeout следующим образом:
this.o_showtimer = setTimeout( expandItem(this.n_id, n_id),
o_item.getprop('expd_delay'));
Firebug выдал следующее сообщение об ошибке:
useless setTimeout call (missing quotes around argument?)
И в обвале не было никаких задержек.
Я поместил аргумент в кавычки (хотя рекомендуется против здесь ), например:
this.o_showtimer = setTimeout( "expandItem(this.n_id, n_id)",
o_item.getprop('expd_delay'));
, ноэто не сработало.Оказалось, что ничего не происходит, и некоторые сообщения console.log () в код подтверждают это.
Я пытался использовать анонимный вызов функции, как рекомендовано здесь и здесь вот так:
this.o_showtimer = setTimeout( function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
но это тоже не сработало.Это привело к нежелательным результатам в IE (элементы не сворачивались так же, как раньше), и ничего не происходило в Firefox (размещение операторов console.log () в функциях expandItem и collapseItem подтвердило, что они не вызывались).
Я даже попытался сделать следующее:
this.o_hidetimer = setTimeout( function() { alert('test'); },
o_item.getprop('hide_delay'));
, и это даже не сработало!Кажется, что-то не так с вызовом анонимной функции.
Обнаружено, что присвоение значения setTimeout переменной , отличной , чем this.o_showtimer, вызвало левый аргумент setTimeout fire.Должно быть что-то делать с назначением чего-либо для этого.
Если я сделаю это:
var o_showtimer = setTimeout( function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
, будет вызываться expandItem.Однако, если я сделаю это:
var o_showtimer = setTimeout( function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
this.o_showtimer = o_showtimer;
Как будто setTimeout может предсказать будущее!(expd_delay равно 0!).