使用setInterval,但想要在检测到用户输入时禁用它

时间:2013-12-17 03:05:37

标签: javascript ajax jquery

我正在使用setInterval调用一个函数,该函数通过ajax get请求加载我的页面,并将响应输出到页面排序,就像“实时更新”页面一样,我有注释和输入框提交评论但问题是,当用户在表单中输入数据时,它会同时重置,因为页面在后台使用ajax调用进行刷新。

我的问题是:我如何才能使表格如果表单上有任何用户输入(可能是表单ID)然后禁用计时器,直到他们离开表单元素的焦点?

我希望这是有道理的,

4 个答案:

答案 0 :(得分:2)

我认为你需要使用jquery的焦点和模糊功能

var my_interval;
function start_interval(){
my_interval = setInterval(function(){
my_ajax_function()}, 2000);
}
$('input').focus( function() {
 clearInterval(my_interval);
});

$('input').blur( function() {
  start_interval();
});

答案 1 :(得分:1)

请改用setTimeout,你可以

var t;
t = setTimeout(function(){
    //whatever you like
}, 1000);

$('input').one('click', function(){
    clearTimeout(t);
});

阅读 - http://www.w3schools.com/jsref/met_win_cleartimeout.asp

答案 2 :(得分:1)

也可以使用clearInterval方法。

//start the routine
var myRoutine = setInterval(blah);

//stop the routine
clearInterval(myRoutine);

您可能需要使用您喜欢的Web框架将事件侦听器附加到表单<input>元素,并在这些事件侦听器中调用clearInterval

答案 3 :(得分:1)

您只需使用clearInterval

即可
$(function() {
    var AtlassTimer,
        i = 0;

    function oncommententer()
    {
        console.log('Clear');
        clearInterval(AtlassTimer);
    }

    function oncommentleave()
    {
        console.log('Start');
        AtlassTimer  = setInterval(loadactiveusers, 1000);          
    }

    function loadactiveusers() {
        $('#result').html(i++);
    }

    $('#formId input').on({
        'keypress change': oncommententer,
        blur: oncommentleave
    });

    //Init
    oncommentleave();
});