Permet à la fonction de s’exécuter après que l’utilisateur survole le lien pendant 2 secondes

Oui, je sais que cette question a déjà été posée, mais je ne trouve pas de réponse satisfaisante. C’est une réponse acceptée de l’une des autres questions:

$('#element').hover(function() { $(this).data('timeout', window.setTimeout(function() { alert('hovered for 2 seconds'); }, 2000)); }, function() { clearTimeout($(this).data('timeout')); alert('mouse left'); }); 

http://jsfiddle.net/nCcxt/

Comme vous le voyez, il ne fait pas ce qu’il est censé faire.

Ce dont j’ai besoin est simple en théorie mais je n’arrive pas à le faire fonctionner – lorsqu’un utilisateur survole un lien pendant 2 secondes, une fonction est appelée. Si l’utilisateur éloigne la souris avant 2 secondes, rien ne se passe.

Le code fonctionne parfaitement bien . Il ne casse que du fait des appels alert() qui déclenchent l’événement mouseout.

Qu’apprenons-nous de cela? N’utilisez pas alert() en combinaison avec des événements liés à focus / survol / déplacement de souris.

En passant, il existe déjà des plugins jQuery disponibles pour ce que vous voulez faire: http://cherne.net/brian/resources/jquery.hoverIntent.html