setTimeout延迟不起作用 - 我做错了什么?

时间:2011-10-09 03:17:32

标签: javascript jquery

我为一个下拉菜单放了一段代码,绑定到.hover(),但遗憾的是setTimeout()上的延迟似乎不起作用,只要鼠标是从.button移出,它将#sub-nav的显示属性设置为none

Dreamweaver CS 5.5将语法评估为正确:(。

这是我的代码:

function retract(){ $('#sub-nav').css('display', 'none'); }

$('#header-restrict > .button').hover( function() {

  if($(this).html() == "Offers") {
      $('#sub-nav').css('display', 'block');
      $('#sub-nav').html('<a href="#">Add a New Offer</a> &nbsp;&nbsp;&nbsp; <a href="#">Edit an Offer</a> &nbsp;&nbsp;&nbsp; <a href="#">Get Offer Links</a>');
  }

  if($(this).html() == "Rotations") {
      $('#sub-nav').css('display', 'block');
      $('#sub-nav').html('<a href="#">Add a New Rotation</a> &nbsp;&nbsp;&nbsp; <a href="#">Edit a Rotation</a> &nbsp;&nbsp;&nbsp; <a href="#">Get Rotation Links</a>');
  }
}, function() { setTimeout(retract(), 4000); });

如果有人可以评论/回答为什么延迟似乎不起作用,我们将不胜感激!

1 个答案:

答案 0 :(得分:4)

setTimeout(retract(), 4000)

应该是

setTimeout(retract, 4000)

前者立即执行retract,然后将其返回值(即undefined)传递给setTimeout。由于undefined不是函数,setTimeout会尝试将其转换为字符串并将eval转换为字符串,而正是......没有。

后者说“从现在开始运行函数retract 4000 ms。”