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函数以及我如何确保它们正常运行。
谢谢
答案 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();
};
更紧密?