settimeout中传入参数的问题

<body>
    <div class="nav">
        <ul class="nav_level_1">
            <li><a href="#">首页</a></li>
            <li><a href="#">课程大厅</a>
                <ul class="nav_level_2">
                    <li><div class="corn"></div></li>
                    <li><a href="#">JavaScript</a></li>
                    <li><a href="#">JQuery</a></li>
                </ul>
            </li>
            <li><a href="#">学习中心</a></li>
            <li><a href="#">经典案例</a></li>
            <li><a href="#">关于我们</a></li>
        </ul>
    </div>
    <script type="text/javascript">
    window.onload = function(){
        var nav_level_1 = document.getElementsByClassName("nav_level_1")[0],
            lis_1 = nav_level_1.children;
            for(var i = 0;i < lis_1.length;i++){
                lis_1[i].onmouseover = function(){
                    var ul = this.getElementsByClassName("nav_level_2")[0];
                    addHeight(ul);
                }

            }
    }
    function addHeight(ul){
        var ul_height = ul.offsetHeight;
        ul_height++;
        if(ul_height <= 95){
            ul.style.height = ul_height + "px";
            setTimeout("addHeight('"+ul+"')",10);
        }else{
            return;
        }
    }
    </script>
</body>

用settimeout写二级菜单的展开收缩,在settimeout中传入一个带有参数的函数,不知道怎么传,视频中是这样写的setTimeout("addHeight('"+ul+"')",10)但是不太正常,请问是什么原因?

阅读 3.7k
2 个回答
setTimeout(function () {addHeight(ul)},10);

setTimeout 这个函数第一个参数可以接受一个 函数 或者 一段代码,如果是代码,则将它放进eval执行。

你这里的写法就是一段代码的写法,你检查一下引号的书写,是不是一一对应的写的正确。或者换成下面的两个写法都应该可以正常工作

setTimeout(function () {
    addHeight(ul)
}, 10);
setTimeout(addHeight, 10, ul)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题