我有一个跨度列表,其中“元数据”存储在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);
}
以上显然存在缺陷,我知道为什么,如上所述。我不确定如何完成我想要的东西。
答案 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(){