2012-04-22 77 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