2010-11-30 2 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); 
     }); 
Смежные вопросы