0
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 元素,然后隐藏该对象。

尽管它对我说,但它运行不正常

未捕获的类型错误:对象 [object Object] 没有方法“nothover”

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

谢谢你

4

3 回答 3

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();
});

```

于 2013-03-04T05:43:22.803 回答
1

要将方法添加到 jQuery 对象,您必须做$.fn.nothover = function(){......您所拥有的只是将函数表达式分配给变量,这绝不会影响 jQuery。

于 2013-03-04T02:48:37.580 回答
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();
};

更近一点?

于 2013-03-04T03:00:08.507 回答