jQuery settimeout无法使用匿名函数

时间:2012-09-10 19:14:18

标签: jquery scope settimeout anonymous-function

我有这个设置为我的每个DIV添加 mouseenter 事件:

  $(document).ready(function () {
  $('div[id^=domainEnter]').mouseenter(function () {


                toggleSearchDisplay($(this).attr('domaincount'), 'show');

            });
 });

然后我定义了这个函数:

  function toggleSearchDisplay(num, showhide) {

            if ($('div[id=domainDiv' + num + ']').css('display') == "block" || showhide == "hide") {
                $('div[id=domainDiv' + num + ']').hide('fast');
                $('a[id = domainLink' + num + ']').text('+');
                $('input[id ^= SearchControls_' + num + '__SearchControlVisible]').val('false');
            } else {

                $('div[id=domainDiv' + num + ']').show('fast');
                $('a[id = domainLink' + num + ']').text('-');
                $('input[id ^= SearchControls_' + num + '__SearchControlVisible]').val('true');


            }
        }

这一切都运作良好并且做了我需要它,但现在 我正试图在第一个块的MouseEnter位上设置超时/延迟... 我试过这个,它永远不会执行:

$('div[id^=domainEnter]').mouseenter(setTimeout(function () {

                toggleSearchDisplay($(this).attr('domaincount'), 'show');

            },1000));

然后我尝试了这个,执行,但没有延迟......它正常运行:

 $('div[id^=domainEnter]').mouseenter(function () {

            setTimeout(toggleSearchDisplay($(this).attr('domaincount'), 'show'),1000);

        });

我不知道该做什么......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在你的第一次尝试中,你没有给mouseenter作为参数的函数,而是setTimeout的结果,即计时器。

在第二个中,当执行提交给setTimeout的回调时,this就是窗口。

这是解决问题的方法:

$('div[id^=domainEnter]').mouseenter(function(){
     var $this = $(this);
     setTimeout(function () {
        toggleSearchDisplay($this.attr('domaincount'), 'show');
     },1000)
});