【问题标题】:Prevent Multiple Firing of Script on Scroll防止在滚动时多次触发脚本
【发布时间】:2012-05-03 14:40:24
【问题描述】:

我有一个跨度列表,“元数据”存储在 alt 标记中。当用户将鼠标悬停在 span 上整整一秒时,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);
}

上述内容显然存在缺陷,我知道原因,如上所述。我不确定如何完成我想要的。

【问题讨论】:

    标签: jquery hover delay settimeout wait


    【解决方案1】:

    使用前请清除。

    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(){

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多