2012-06-16 7 views
5

Sì, so che questa domanda è stata posta prima, ma non riesco a trovare una risposta che funzioni. Si tratta di una risposta accettata da una delle altre domande:Esegui funzione dopo che l'utente passa sul collegamento per 2 secondi

$('#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/

Come si vede non fa quello che si suppone.

Quello che mi serve è semplice in teoria, ma non riesco a farlo funzionare - quando un utente passa sopra un collegamento per 2 secondi, viene chiamata una funzione. Se l'utente sposta il mouse prima che passi 2 secondi, non succede nulla.

risposta

14

Il codice works perfectly fine. Si interrompe solo a causa delle chiamate alert() che provocano l'attivazione dell'evento mouseout.

Cosa impariamo da questo? Non utilizzare alert() in combinazione con eventi relativi a focus/hover/mousemove.

A proposito, ci sono già jQuery plugin disponibili per quello che si vuole fare: http://cherne.net/brian/resources/jquery.hoverIntent.html

+0

Bene. Lo guarderesti? Non mi è mai passato per la testa. Grazie. – jovan

Problemi correlati