设置超时不给出所需的结果

时间:2012-01-29 11:29:47

标签: javascript jquery

这里我的setTimeout函数只是在点击后立即调用,但我希望它点击10秒点击

$('#switchsubjects').click(function(e)
{
    i++;
var x=$('#subject-class-switch').html();
    if(i<2)
    {
        $(this).append('<ul id="dcl"><li class="ui-btn-inner ui-li">Class</li><li class="ui-btn-inner ui-li">Subjects</li></ul>');
            e.stopPropagation();
    setTimeout(rm(),10000);
    }
    else
    {
        $('#dcl').remove();
        i=0;
    }
});     

        function rm()
        {
        console.log("working");
        $('#dcl').remove();
        i=0;
        }

3 个答案:

答案 0 :(得分:1)

试试这个:

setTimeout(rm ,10000);  // note no parentheses after rm

setTimeout()函数要求第一个参数是函数引用(或字符串,但字符串几乎总是错误的选择)。通过说rm(),您实际上是在该点调用rm函数并将其返回值传递给setTimeout()(在这种情况下,返回值为undefined)。如果您传递的rm没有通过对您的函数的引用的括号,setTimeout可以在您指定的延迟后调用。

The doco at MDN非常适合更多信息和其他示例。

答案 1 :(得分:1)

您不理解函数调用和函数引用之间的区别。假设你有这个功能

function myFunction() {
   // some code
}

然后这是一个即时函数调用

myFunction()

这是一个功能参考

myFunction

setTimeout的第一个参数必须是函数引用(或包含javascript代码的字符串,但不推荐使用)。

setTimeout(rm, 10000);

答案 2 :(得分:0)

setTimeout("rm()",10000);

否则rm()立即执行,并且仅在10秒后评估其结果。