包含未正确执行的间隔的onmouseover和onmouseout函数

时间:2012-10-10 04:28:43

标签: javascript intervals onmouseover onmouseout

我正在使用JavaScript进行一些实验,我有一个水平显示的4个项目列表,每个列表项目都分配了onmouseoveronmouseout个事件。

每个项目的onmouseover事件执行一个函数,该函数使用间隔增加项目的高度。

每个项目的outmouseover事件执行一个函数,然后使用另一个间隔将项目的高度随时间减少到默认值。

它适用于以下场景: 当我为列表项触发onmouseover时,高度按预期增加,当我从列表项中取出鼠标时,高度会按预期减少。

问题是,它似乎在以下场景中不起作用: 当我触发列表项的onmouseover时,高度会按预期增加,但如果我在之前触发另一个列表项的另一个onmouseover事件,则该项目已恢复为原始大小,上一个列表项的onmouseout函数没有完成执行。

很抱歉,如果我缺少任何细节,显然我在解释事情方面非常糟糕......所以我有一个源代码链接和一个可以测试代码的网站,看看发生了什么。

也许我没有像我想象的那样有关javascript的知识,所以虽然解决方案或解决方案会很棒,但我也很乐意接受任何建议或某种解释,为什么会发生这种情况。

我最初认为多个间隔定时器无法同时执行,直到经过一些研究后才发现它们可以。所以我现在想的是onmouseoveronmouseout事件之间是否存在冲突。

非常感谢任何建议,指导或解决方案!


资源: https://docs.google.com/open?id=0B6XLOOGyKVdWVkpSUklmMVI5QUk
测试现场: http://www.play-hookey.com/htmltest/
(只需复制该google文档的内容并粘贴到网站的html文本区域,看看我在说什么)

1 个答案:

答案 0 :(得分:3)

您的代码:

icon.onmouseover = function(){ enlarge(this, icon.ID); };
icon.onmouseout = function(){ reduce(this, icon.ID); };

正确的代码:

icon.onmouseover = function(){ enlarge(this, this.ID); };
icon.onmouseout = function(){ reduce(this, this.ID); };

发生了什么:您使用函数绑定了一个事件并将变量传递给它。在每个for循环之后,您重新定义了该函数变量(最后,您的icon.ID = 3)。这意味着所有使用相同icon.ID = 3的事件称为函数。

我希望有意义......