0

フォームの値を xxxx 秒ごとに db に保存するコードを実行しようとしています。これは、ユーザーがフォームを初めて使用する場合にのみ実行する必要があるため、これには基本的なフォーカス イベントを使用したいと考えていました。動作しますが、これは、ユーザーがフィールドにフォーカスするたびにコードが (再度) 実行されることを意味しますが、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);
});

しかし、これは要素ごとに1回実行されるため、最善の解決策はそれほど魅力的ではありません:

$('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 に答える