2013-02-08 6 views
0

Я пытаюсь запустить кусок кода, который хранит значения формы в db каждые xxxx секунд, это должно выполняться только в том случае, если пользователь использует форму в первый раз поэтому я хотел использовать для этого основное фокусное событие, это работает, но это означает, что каждый раз, когда пользователь фокусируется на поле, код запускается (снова), но не после xxxx секунд.jquery: запустить код при первом использовании формы

Так что мне нужно, чтобы, если пользователь начал использовать форму, он должен запускать функцию setInterval каждые xxxx секунд, а не каждый раз, когда пользователь фокусируется на поле.

// базовый пример

$('form').on('focus', 'input, textarea, select', function(){ 
    setInterval(function(){ 
     //run code into db 
     alert('saved'); 
    },10000); 
}); 

ответ

4

Вы можете использовать one:

$('form').one('focus', 'input, textarea, select', function(){ 
    setInterval(function(){ 
     //run code into db 
     alert('saved'); 
    },10000); 
}); 

но это выполнить бы один раз для каждого элемента, так что я боюсь, что лучшим решением будет не так гламура:

$('form').one('focus', 'input, textarea, select', function(){ 
    if ($(this.form).data('done')) return; 
    $(this.form).data('done', 'yes'); 
    setInterval(function(){ 
     //run code into db 
     alert('saved'); 
    },10000); 
}); 

или:

var doit = function() { 
    setInterval(function(){ 
     //run code into db 
     alert('saved'); 
    },10000); 
    $('form').off('focus', 'input, textarea, select', doit); 
}; 
$('form').on('focus', 'input, textarea, select', doit); 
+0

как глупо обо мне .... спасибо !!! – user759235