2012-04-22 75 views
1

我有一个跨度列表,'元数据'存储在alt标记中。当用户将鼠标悬停在整个范围上时,alt标签信息会附加到另一个元素上,以供读取。防止在滚动上多次触发脚本

我的问题是,如果我快速滚动跨越多个跨度,脚本会多次触发;所以setTimeout()是毫无意义的,因为它们最终都会触发,我得到了所有这些alt的附加信息,而不是仅仅在整秒钟内徘徊的信息。

var target; 
$("#LIST span").live('hover', function(){ 
    target = $(this); 
    setTimeout(function() { 
     getALT = target.attr('alt'); 
     $(document).showALT(); 
    }, 1000); 
}); 

jQuery.fn.showALT = function(){ 
    $("#tell2").append('X ') 
    $(".Show_Info").attr('src', getALT); 
} 

以上显然是有缺陷的,我知道为什么,如上所述。我不知道如何完成我想要的。

回答

3

使用前清除。

var target; 
var timeO; 
$("#LIST span").live('hover', function(){ 
    target = $(this); 
    clearTimeout(timeO); 
    timeO = setTimeout(function() { 
     getALT = target.attr('alt'); 
     $(document).showALT(); 
    }, 1000); 
}); 

jQuery.fn.showALT = function(){ 
    $("#tell2").append('X ') 
    $(".Show_Info").attr('src', getALT); 
} 

P.S:你也可以使用:的function showALT(){代替:jQuery.fn.showALT = function(){

PS2:如果使用JQ 7+比.live()方法已经过时了。使用.on()代替:

$("#LIST").on('hover','span', function(){

+0

Thanks!我不知道我能做到这一点;并感谢1.7的提示。它现在完美。 – 2012-04-22 23:23:05

+0

@Jason我真的很高兴。谢谢。 +1 – 2012-04-22 23:25:13