2010-11-30 41 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); 
     });