2010-11-30 8 views
0

Je dois exécuter execFunc(); non seulement lorsque l'utilisateur passe au champ suivant, mais aussi lorsque l'utilisateur reste concentré sur le même champ pendant 5 secondes.exécuter javascript après se concentrer sur un élément

$('input[name="email"]').bind('blur', function() { 
execFunc(); 
}); 
+0

Que diriez-vous * pas * faire cela? ;) – Alex

Répondre

1
var timer = null; 
$('input[name="email"]').blur(function(e){ 
    if (timer) clearTimeout(timer); 
    execFunc(); 
}).focus(function(e){ 
    timer = setTimeout(execFunc, 5000); 
}); 

Si vous faisons la validation de formulaire, il y a de meilleures façons de le faire.

+0

Ce n'est pas une validation, il suffit de vouloir sauvegarder son email au cas où ce serait le dernier mince et abandonner son panier – Webnet

0

Que diriez-vous ...

$('input[name="email"]').bind('blur', execFunc).bind('focus', function() { 
    setTimeout(execFunc, 5000); 
}); 

Si la fonction est idempotente et vous devez l'exécuter une seule fois, vous pouvez faire:

var execFuncHasExecuted = false; 
function execFunc() { 
    if (execFuncHasExecuted) 
     return false; 
    execFuncHasExecuted = true; 

    // ... remainder of implementation 
} 
+0

cela exécutera execFunc deux fois si l'utilisateur brouille le champ avant que les 5 secondes ne soient écoulées. – zzzzBov

+0

Il convient de noter que le premier exemple de code de VoteyDisciple utilise [jQuery] (http://jquery.com/). – sholsinger

+0

@sholsinger, ainsi que l'exemple OPs. –

0

Cela devrait suffire

var g_timeout = null; 

$('input[name="email"]') 
     .blur(function() { 
      execFunc(); 
     }) 
     .focus(function(){ 
      if (g_timeout) clearTimeout(g_timeout); 
      g_timeout= setTimeout(execFunc, 5000); 
     }); 
Questions connexes