jQuery clearInterval无法正常工作

时间:2011-07-07 16:43:04

标签: javascript jquery

我有以下悬停功能

function tt_attachToBase(){
        jQuery.each(bases,
            function(index,base){

                jQuery(base).hover(function() {  
                         jQuery(base).showTipTimer = setInterval( function(){tt_locateBase(base);} , 3000 ); 
                             },  
                            function() {  
                                clearInterval(jQuery(base).showTipTimer);
                                tt_hideTip();
                                    }

                    }); 
            }

        );

在tt_locateBase()里面我也清除像这样的间隔

tt_locateBase(base){
clearInterval(jQuery(base).showTipTimer);
//code to sidplay tooltip
}

工具提示会在间隔后显示,但由于工具提示会在基础上重复出现,所以它似乎永远不会被清除。我究竟做错了什么?

2 个答案:

答案 0 :(得分:2)

将属性设置为jQuery(base)的返回值只会影响该特定对象。如果您第二次获取jQuery(base),则不会携带该属性。

您目前正在做的事情等同于以下代码:

function return_something() {
    return ['foo', 'bar'];
}

var first_fetch = return_something();
// => ['foo', 'bar']
first_fetch.push('baz'); // => ['foo', 'bar', 'baz']

var second_fetch = return_something(); // => ['foo, 'bar']

解决方案

或许将其作为a data field附加?这样,它将影响DOM中的实际对象,jQuery对象将在后续提取中携带该数据值。

jQuery(base).data('showTipTimer', 
  setInterval(function(){tt_locateBase(base);} , 3000));

然后清楚:

clearInterval(jQuery(base).data('showTipTimer'));

答案 1 :(得分:0)

你尝试过这个:

   jQuery(base).hover(function() {  
         var idInterval = setInterval( function(){tt_locateBase(base, idInterval);} , 3000 ); 
                         },  

然后

tt_locateBase(base, i){
clearInterval(i);
//code to sidplay tooltip
}
相关问题