2012-01-29 19 views
0

这里我用setTimout通话功能只是immedieatly点击之后,但我希望它火亚特点击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; 
     } 

回答

1

试试这个:

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

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

The doco at MDN对于更多信息和其他示例非常有用。

+0

谢谢先生:-) – spiderman 2012-01-29 11:44:06

1

您不明白函数调用和函数引用之间的区别。比方说,你有这个功能

function myFunction() { 
    // some code 
} 

那么这是一个直接的函数调用

myFunction() 

这是一个函数引用

myFunction 

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

setTimeout(rm, 10000); 
+0

...或包含字符串的变量 - 不一定是文字。 – nnnnnn 2012-01-29 11:39:08

+0

是的,据此编辑 – devnull69 2012-01-29 11:40:40

0
setTimeout("rm()",10000); 

否则rm()被立刻执行,并且只有其结果在后面进行评价10秒。

相关问题