gpt4 book ai didi

javascript - Firefox 中的 setTimeout 问题

转载 作者:搜寻专家 更新时间:2023-11-01 04:11:33 25 4
gpt4 key购买 nike

菜单系统应该根据给定的延迟展开和折叠,使用以下语句(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?)

而且崩溃没有延迟。

我将论点放在引号中(尽管建议反对 here ),如下所示:

this.o_showtimer = setTimeout( "expandItem(this.n_id, n_id)",
o_item.getprop('expd_delay'));

但这没有用。似乎什么都没有发生,将一些 console.log() 消息扔到代码中证实了这一点。

我尝试使用推荐的匿名函数调用 herehere像这样:

this.o_showtimer = setTimeout( function() { expandItem(this.n_id, n_id); },
o_item.getprop('expd_delay'));

但这也不起作用。它在 IE 中产生了不良结果(项目未折叠的方式与以前相同)并且在 Firefox 中没有发生任何事情(在 expandItem 和 collapseItem 函数中放置 console.log() 语句确认它们没有被调用)。

我什至尝试过以下操作:

this.o_hidetimer = setTimeout( function() { alert('test'); },
o_item.getprop('hide_delay'));

那根本行不通!调用匿名函数似乎有问题。

发现将 setTimeout 的值分配给 other 而不是 this.o_showtimer 会使 setTimeout 的左参数触发。必须与为此分配一些东西有关。

如果我这样做:

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可以预知 future 似的! (expd_delay 为 0!)。

最佳答案

我认为问题在于 Javascript 对“this”的特殊处理。当您在匿名函数中调用“expandItem”时,您并不是将其作为方法调用,因此“this”被设置为基本范围(窗口)。

我建议使用局部变量

var that = this;
this.o_showtimer = setTimeout( function() { expandItem(that.n_id, n_id); },
o_item.getprop('expd_delay'));

关于javascript - Firefox 中的 setTimeout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com