2010-11-30 13 views
0

Ich muss execFunc(); nicht nur ausführen, wenn der Benutzer auf das nächste Feld bewegt, sondern auch ausgeführt wird, wenn der Benutzer für 5 Sekunden auf das gleiche Feld konzentriert bleibt.führen Sie Javascript nach Fokus auf ein Element

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

Wie über Sie * nicht * das tun genügen? ;) – Alex

Antwort

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

Wenn Sie Bei der Formularvalidierung gibt es bessere Möglichkeiten, dies zu tun.

+0

Es ist keine Validierung, nur um ihre E-Mails zu speichern, für den Fall, dass dies der letzte ist, den sie machen und ihren Warenkorb verlassen – Webnet

0

Wie wäre es ...

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

Wenn die Funktion nicht idempotent ist, und Sie müssen es nur einmal ausführen, können Sie tun:

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

    // ... remainder of implementation 
} 
+0

dies wird execFunc zweimal ausführen, wenn der Benutzer das Feld vor den 5 Sekunden verwischt. – zzzzBov

+0

Es sollte beachtet werden, dass das erste Codebeispiel von VoteyDisciple [jQuery] (http://jquery.com/) verwendet. – sholsinger

+0

@sholsinger, so auch das OPs Beispiel. –

0

Dies sollte

var g_timeout = null; 

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