2013-02-02 47 views
0

我想在鼠标悬停在另一个DOM元素上时显示div,但如果在显示div之前移动鼠标,我想取消此操作。到目前为止,这是我Jquery悬停取消操作

HTML

<div id="msg"> 
    <a href="#" id="33"> HERE </a> 
</div> 

JS

var timer; 
$("body").on('mouseenter', '#msg a',function(){ 
    var userHover = $(this).attr("id"); 
    timer = setTimeout(function() { 
     alert(userHover); 
    }, 1000); 
}).on('mouseleave', '#msg a', function(){ 

}); 

http://jsfiddle.net/Nyrdz/

任何帮助表示赞赏。

+1

你只是想清除超时?在这种情况下'clearTimeout(timer)'应该做的诀窍...... –

+0

好吧,它更像是如果用户在div弹出之前将鼠标从'a'元素移开,div不会显示,div当然要显示的是其他地方的信息框。清除超时会否取消此呼叫?只是想清楚谢谢。 – kabuto178

回答

3

您正在寻找clearTimeout()

var timer; 
$("body").on('mouseenter', '#msg a', function(){ 
    var userHover = $(this).attr("id"); 
    timer = setTimeout(function() { 
     alert(userHover); 
    }, 1000); 
}).on('mouseleave', '#msg a', function(){ 
    clearTimeout(timer); 
}); 

但是,如果你有一个以上的元件匹配#msg a我强烈建议你存储在特定元素的数据timer值。

$("body").on('mouseenter', '#msg a', function(){ 
    var userHover = $(this).attr("id"); 
    $(this).data('timer', setTimeout(function() { 
     alert(userHover); 
    }, 1000)); 
}).on('mouseleave', '#msg a', function(){ 
    clearTimeout($(this).data('timer')); 
}); 
+0

是的,在#msg中有多个'a'元素 – kabuto178

+0

感谢它适合我目前的问题:) – kabuto178