防止在滚动上多次触发脚本

时间:2012-04-22 22:56:05

标签: jquery hover delay settimeout wait

我有一个跨度列表,其中“元数据”存储在alt标记中。当用户将鼠标悬停在跨度上一整秒时,alt标记信息将附加到另一个元素上,以供读取。

我的问题是,如果我快速滚动多个跨度,脚本会多次触发;所以setTimeout()是没有意义的,因为它们最终都会被激活,而且我会附加所有这些附加信息,而不是仅仅是那个被徘徊一整秒的那个。

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

以上显然存在缺陷,我知道为什么,如上所述。我不确定如何完成我想要的东西。

1 个答案:

答案 0 :(得分: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(){