2010-03-29 76 views
0

我有这个简单的函数,它向用户显示一条消息。如果我添加超时参数,它将自动滑回,如果用户不需要单击它来摆脱。但超时位不起作用。setTimeout()不执行

function feedback(text, timeout){ 
    $('#feedback').text(text).slideDown('fast'); 

    $('#feedback').click(function(){ 
     $(this).slideUp(); 
    }); 
    if(timeout){ 
     setTimeout(function(){ 
      $('#feedback').slideup(); 
     }, timeout); 
    } 
} 
+0

有你这样的超时参数传递什么? – mck89 2010-03-29 16:02:48

回答

3

的问题是,需要$('#feedback').slideup();资本U在那里(例如.slideUp())。您也可以缩短下来一点总这样做:

function feedback(text, timeout){ 
    var fb = $('#feedback').text(text).slideDown('fast'); 
    if(timeout) fb.delay(timeout).slideUp(); 

    fb.click(function(){ 
     $(this).slideUp(); 
    }); 
} 

它使用内置的jQuery delay()功能,实现更简洁的方式相同的效果。

+0

+1不知道这个新的'delay()'函数 – Matt 2010-03-29 16:14:17

-3

将整个函数调用放入一个设置的超时函数是无效的。您的setTimeout永远不会触发,因为setTimeout将只接受函数引用。

setTimeout(function(){ 
    $('#feedback').slideup(); 
}, timeout); 

试试下面的代码:

var ref = function() { 
    $('#feedback').slideup(); 
}; 
setTimeout(ref, timeout); 
+0

这是不正确的,传递一个完整的函数是完全有效的。请亲自看看:http://jsfiddle.net/XaEYx/ – 2010-03-29 16:10:30

+0

错误。将完整的函数构造作为参数传递是完全可以接受的。它被称为“关闭” – Matt 2010-03-29 16:11:31

相关问题