0

我正在尝试运行一段代码,每 xxxx 秒将表单的值存储到数据库中,这应该只在用户第一次使用表单时运行,所以我想为此使用基本的焦点事件,这个有效,但这意味着每次用户关注某个字段时,代码都会(再次)运行,但不会在 xxxx 秒后运行。

所以我需要一种方法,如果用户开始使用表单,它应该每 xxxx 秒运行一次 setInterval 函数,而不是每次用户关注某个字段时。

// 基本示例

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

1 回答 1

4

您可以使用一个

$('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);
于 2013-02-08T21:36:51.640 回答