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

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

4

1 回答 1

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

PS:您也可以使用:function showALT(){而不是:jQuery.fn.showALT = function(){

PS2:如果您使用 jQ 7+,则不.live()推荐使用该方法。改为使用.on()

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

于 2012-04-22T23:07:57.497 回答