几秒钟之后鼠标悬停后,是否还有onmouseover火?

时间:2012-01-10 15:14:38

标签: javascript onmouseover

我想确保用户希望通过鼠标悬停来弹出一些东西。我不希望用户在没有意图的情况下意外触发弹出的内容。 setTimeout不起作用,因为即使它非常短暂,弹出窗口仍然会弹出,它只会延迟。我想要的是用户将鼠标悬停1秒以便弹出显示。

**更新:

当我这样做时:

<div onmouseover="myTimer=setTimeout('display(this)', 5000);">

计时器工作,并在5秒后显示,但this未通过,我无法通过$(element).next()等获取元素。 当我这样做时:

 <div onmouseover="myTimer=setTimeout(display(this), 5000);">

计时器不起作用。有什么问题,如何才能获得计时器并传递this

谢谢!

** update2:来自herethis问题:“setTimeout()执行的代码在一个单独的执行上下文中运行,该函数从中调用它。因此,被调用函数的这个关键字将被设置为窗口(或全局)对象,它不会与调用setTimeout的函数的this值相同。“

我找到了克服这个here的答案,你必须“保存对setTimeout函数调用的上下文的引用”

4 个答案:

答案 0 :(得分:5)

这应该适合你:

<div id="example">Hover me</div>
<script type="text/javascript">
    (function(){
        var timer;
        var el = document.getElementById('example');

        el.onmouseover = function(){
            timer = setTimeout(function(){
                display(el);
                // If display takes no arguments and uses the "this" keyword inside it
                // Use display.call(el); instead
            }, 1000);
        }

        el.onmouseout = function(){
            clearTimeout(timer);
        }
    })();
</script>

Example on JSFiddle

答案 1 :(得分:0)

鼠标悬停时,您可以启动计时器。在鼠标输出时将定时器重置为0.如果定时器达到1秒,则可以触发事件并将定时器重置为0.

答案 2 :(得分:0)

我后来遇到了一个名为hoverIntent jQuery插件的东西,值得一试。

答案 3 :(得分:-1)

我很确定这应该有效:

onmouseover="myTimer=setTimeout(yourFunctionName, 1000);"

您还必须添加:

onmouseout="clearTimeout(myTimer);"