2010-11-30 43 views
0

我不仅需要在用户移动到下一个字段时运行execFunc();,还需要在用户在同一个字段中持续5秒钟的焦点时运行。在关注元素后执行javascript

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

你怎么样*不*做到这一点? ;) – Alex 2010-11-30 19:22:26

回答

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

如果您'正在进行表单验证,有更好的方法来做到这一点。

0

......怎么

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

如果功能不幂等,你必须只执行一次,你可以这样做:

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

    // ... remainder of implementation 
} 
+0

这将执行execFunc两次,如果用户在5秒钟之前模糊了字段。 – zzzzBov 2010-11-30 19:22:03

+0

应该注意的是,VoteyDisciple的第一个代码示例使用[jQuery](http://jquery.com/)。 – sholsinger 2010-11-30 19:24:43

0

这应该足够了

var g_timeout = null; 

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