setTimeout和clearTimeout分配给var并指定

时间:2013-03-04 02:45:05

标签: javascript jquery settimeout

var nothover = function(){window.setTimeout(function() {
     $('#proFBfeel').hide();
      $('#proFBfeel .moreinfos').html('');
       $('.contact_pro').html('');
     },3000);
   };
  $('#proFBfeel').nothover();
    $('#proFBfeel').hover(function() {
        window.clearTimeOut(nothover);
     });
         $('html').click(function() {
           $('#proFBfeel').hide();
            $('#proFBfeel .moreinfos').html('');
             $('.contact_pro').html('');
          });

好的,你可以看到我指定的var nothover是setTimeout

三秒钟后,我想让函数运行,除非对象悬停。如果它是为了清除时间而徘徊。

然后一旦回到对象外部再次运行该函数,或者除非他们单击HTML元素然后隐藏该对象。

虽然它对我来说不能正常运行

未捕获的TypeError:对象[object Object]没有方法'nothover'

这是为什么?如果有人可以提供帮助,我会非常感激。通过帮助我的意思是解释一些javascript函数以及我如何确保它们正常运行。

谢谢

3 个答案:

答案 0 :(得分:4)

setTimeout返回一个值。如果要“取消”超时,请将值提供给clearTimeout。您将您的功能传递给clearTimeout。那不会做任何事情。这个帖子中似乎没有人注意到这一点。以下是有关此文档的文档:clearTimeout

这是工作代码:

var notHover = function() {
   var timerId = setTimeout(function () {
      $('#proFBfeel').hide();
      $('#proFBfeel .moreinfos').html('');
      $('.contact_pro').html('');  
    }, 3000);

    // return a function which will cancel the timer
    return function () { clearTimeout(timerId); };
};

// start the timer.  We can call cancelTimer() if we want to cancel it
var cancelTimer = notHover();

$('#proFBfeel').hover(function() {
    // mouse in, cancel the notHoverTimer
    if (cancelTimer) {
        cancelTimer();
        cancelTimer= undefined;
    }
}, function () {
    // mouse out, start the timer again
    cancelTimer = notHover();
});

```

答案 1 :(得分:1)

要向jQuery对象添加一个方法,你必须做$.fn.nothover = function(){ ...你所拥有的只是将一个函数表达式赋值给一个变量,这决不会影响jQuery。

答案 2 :(得分:1)

$.fn.nothover = function () {
    function hideIt() {
        this.hide();
        this.find(".moreinfos").html("");
    }
    this.hover(function () {
        window.clearTimeout(hideIt);
    });
    window.setTimeout(hideIt, 3000);
};

这是否与您尝试做的一致......?

在这段代码中,我通过在$.fn对象上定义一个属性来定义一个jQuery插件。在这个插件中,我定义了一个函数hideIt,它包含你似乎想要在3秒之后调用的代码,除非用户将鼠标悬停在相关元素上,在这种情况下我们清除3第二次超时。是吗?

尝试#2

也许是这样的......?

$.fn.nothover = function () {
    function initialize() {
        window.setTimeout(doSomething, 3000);
    }

    function doSomething() {
        // do something
    }

    this.hover(function () {
        window.clearTimeout(doSomething);
    }, initialize);

    initialize();
};

更紧密?