Se supone que el sistema de menús para expandir y contraer de acuerdo con un retardo determinado, utilizando las siguientes declaraciones (o_item.getprop('hide_delay')
retornos 200 y o_item.getprop('expd_delay')
devuelve 0):setTimeout en Firefox
this.o_showtimer = setTimeout('A_MENUS['+ this.n_id +'].expand(' + n_id + ');',
o_item.getprop('expd_delay'));
y
this.o_hidetimer = setTimeout('A_MENUS['+ this.n_id +'].collapse();',
o_item.getprop('hide_delay'));
Traté de colocar el código para el primer argumento en funciones separadas y llamo a estas funciones como el primer argumento para setTimeout como este:
this.o_showtimer = setTimeout(expandItem(this.n_id, n_id),
o_item.getprop('expd_delay'));
Firebug produce el siguiente mensaje de error:
useless setTimeout call (missing quotes around argument?)
Y no hubo retraso en el colapso.
coloqué el argumento entre comillas (aunque se recomienda contra here) así:
this.o_showtimer = setTimeout("expandItem(this.n_id, n_id)",
o_item.getprop('expd_delay'));
pero esto no funcionó. Parecía que nada estaba sucediendo en absoluto y arrojar algunos mensajes console.log() en el código confirmó esto.
He intentado utilizar una llamada de función anónima como se recomienda here y here así:
this.o_showtimer = setTimeout(function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
pero esto tampoco funcionó. Produjo resultados indeseables en IE (los elementos que no se colapsan son de la misma manera que antes) y no ocurre nada en Firefox (al colocar las instrucciones console.log() en las funciones expandItem y collapseItem confirmaron que no estaban siendo llamadas).
Incluso he intentado hacer lo siguiente:
this.o_hidetimer = setTimeout(function() { alert('test'); },
o_item.getprop('hide_delay'));
y que ni siquiera funcionaba! Parece que hay algo con llamar a la función anónima.
Descubierto que asignando el valor de setTimeout a una variable otra que this.o_showtimer se activa el argumento de la izquierda de setTimeout. Debe ser algo relacionado con asignar algo a esto.
Si hago esto:
var o_showtimer = setTimeout(function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
expandItem es llamado. Sin embargo, si hago esto:
var o_showtimer = setTimeout(function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));
this.o_showtimer = o_showtimer;
Como si setTimeout pudiera predecir el futuro! (expd_delay es 0!).
Sospecho 'o_item.getprop ('hide_delay')' no es entero, así que pruebe esto: 'esto.o_hidetimer = setTimeout (function() {alert ('test');}, parseInt (o_item.getprop ('hide_delay'), 10)); ' –
Parece que alguien más tarde vendrá y hará' clearTimeout (this.o_showtimer) '. –
La prueba rápida (http://jsfiddle.net/hkH9n/) muestra que no es un problema global con las funciones; muéstranos el código alrededor de 'this.o_showtimer =' y ya veremos. –