为什么加上setTimeout, elem里面的this就指向window了?如果去掉setTimeout就指向当前了.这是为什么?
还有当鼠标移动上的时候只弹出一次..这是因为setTimeout的队列问题吗?那要怎么来清除队列呢?
<html>
<head>
</head>
<body>
<p>top</p>
<script type="text/javascript">
var para = document.getElementsByTagName("p")[0];
para.onmouseover = setTimeout("elem()",1000);
function elem(){
alert(this)
}
</script>
</body>
</html>

解决方案 »

  1.   

    setTimeout 是只弹一次的,setInterval是连续弹的
      

  2.   

    setTimeout要放到方法里面,这样就形成了递归调用了,至于清除方法,如下:var sto = setTimeout(....
    clearTimeout(sto);
      

  3.   


                function elem(){
                    alert(this)
         para.onmouseover = setTimeout("elem()",1000);
                }
      

  4.   

    elem 本来就是window的属性,直接赋给para后,对象就向para了。
    <html>
        <head>
        </head>
        <body>
            <p>top</p>
            <script type="text/javascript">
                var para = document.getElementsByTagName("p")[0];
    //            para.onmouseover = setTimeout("elem()",1000);
                para.onmouseover = window.elem;
                function elem(){
                    alert(this)
                }
            </script>
        </body>
    </html>
      

  5.   

    完整例子
    <html>
        <head>
        </head>
        <body>
            <p>top</p>
            <script type="text/javascript">
                var para = document.getElementsByTagName("p")[0];
                para.onmouseover = elem();
    var sto;
                function elem(){
                    alert(this);
    sto = setTimeout("elem()",1000);
                }
    function stop(){
    clearTimeout(sto);
    }
            </script>
    <input type="button" value="stop" onclick="stop()">
        </body>
    </html>
      

  6.   

    首先你这么写para.onmouseover = setTimeout("elem()",1000);不对的,setTimeout返回的不是一个function;
    setTimeout会改变函数的excute context主要也就是这里的this,会把这个函数调的全局的context里执行,所以this会指向window,而不是什么setTimeout的队列。