如何在javascript中立即手动运行setTimeout计时器?

时间:2012-12-10 16:19:18

标签: javascript jquery asp.net settimeout

我有一个包含Repeater的表单,其中包含RadioButtonListTextBox。当用户更改单选按钮或其中一个TextBox中的文本时,该Repeater项的选定项和相关文本应保存到数据库中。

由于.change()功能,单选按钮更改时保存很容易,但是对于TextBox,当文本更改时我创建了一个计时器,在用户停止输入后2秒保存数据< / p>

问题是,如果用户离开页面或在计时器执行之前开始键入不同的TextBox,我需要手动执行计时器。我怎么能这样做?

我的javascript看起来像这样:

var typingTimer;                //timer identifier
var doneTypingInterval = 2000;  //time in ms, 2 second for example

$('textarea').on('input', function () {
    // Clear timer
    clearTimeout(typingTimer);

    // Set new timer to save form, passing current repeater item to Save method
    var parent = $(this).closest('.my-repeater-section');
    typingTimer = setTimeout(function () { saveForm(parent); }, doneTypingInterval);
});

2 个答案:

答案 0 :(得分:2)

计时器只是一个延迟的函数调用。因此,命名您的功能,您将能够“手动:”

var typingTimer;                //timer identifier
var doneTypingInterval = 2000;  //time in ms, 2 second for example

$('textarea').on('input', function () {
    // Clear timer
    clearTimeout(typingTimer);

    // Set new timer to save form, passing current repeater item to Save method
    var parent = $(this).closest('.my-repeater-section');

    function callback() {
        saveForm(parent);
    }

    typingTimer = setTimeout(callback, doneTypingInterval);

    // call it manually like usual:
    // callback();
});

答案 1 :(得分:2)

在模糊时调用你的保存功能,当用户离开那个textarea时它会失去焦点,如果你听那个事件,你可以在那里使用你的保存功能

 $("textarea").blur(function(){
  //Call your save function here
});