键入时不要刷新

时间:2011-08-30 22:23:10

标签: php jquery ajax refresh typing

这是我的代码:

// Refresh feeds, but ONLY when you are NOT typing
var refreshId = setInterval(function() {
    $("#load-feeds").load('/actions/loadfeed.php?randval='+ Math.random());
}, 9000);
$.ajaxSetup({ cache: false });

我正在开发像Facebook这样的“墙”,你可以对彼此的帖子发表评论。墙壁会自动刷新AJAX(每9秒钟),但是当您正在键入并且文本区域被聚焦时,它会在页面刷新后删除焦点和文本框的内容。

如何在您不打字时进行刷新,并在打字时停止。谢谢!我到处寻找并尝试了一切,但没有运气。

2 个答案:

答案 0 :(得分:2)

我想你有一个这样的输入框:

<input type="text" id="input-box" ... />

你需要做的就是保留一个全局变量,而不是说这个输入是否具有焦点:

var isTyping = false;
$("#input-box").focus(function() {
    isTyping = true;
});
$("#input-box").blur(function() {
    isTyping = false;
});

然后您必须先检查此变量才允许更新:

// Refresh feeds, but ONLY when you are NOT typing
var refreshId = setInterval(function() {
    if (!isTyping) {
        $("#load-feeds").load('/actions/loadfeed.php?randval='+ Math.random());
}, 9000);
    }
$.ajaxSetup({ cache: false });

答案 1 :(得分:0)

您应该在键入时保持timeout计时器运行,并在加载前进行检查:

var typing = false,
    theTimer,
    refreshId = setInterval(function() {
        typing || $("#load-feeds").load('/actions/loadfeed.php?randval='+ Math.random());
    }, 9000);
$.ajaxSetup({ cache: false });

$('#theInput').keyup(function() {
    typing = true;
    theTimer && clearTimeout(theTimer);

    theTimer = setTimeout(function() {
        typing = true;
    }, 500);
});