【问题标题】:Don't refresh when typing输入时不刷新
【发布时间】:2011-11-07 05:00:09
【问题描述】:

这是我的代码:

// 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 秒),但是当您键入并且文本字段获得焦点时,它会在页面刷新后移除焦点和文本框的内容。

我怎样才能让它只在你不打字时刷新,在你打字时让它停止。谢谢!我到处寻找并尝试了所有方法,但没有运气。

【问题讨论】:

  • 与您的问题无关,但考虑到您有一个随机查询参数,缓存 false 不应该是不必要的吗?
  • 只是为了确定,但我没有在不关闭缓存的情况下进行测试。

标签: php jquery ajax refresh typing


【解决方案1】:

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

<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 });

【讨论】:

  • 这可能会起作用,但我怎样才能让它检查所有输入框?或者至少输入框具有相同的类?我有多个文本框。
  • 将 $("#input-box") 更改为.. $(".class-name") 或类列表 $("#input-box1, #input-box2, #输入框3")
【解决方案2】:

您应该在他们输入时保持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);
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2023-03-15
  • 1970-01-01
  • 2017-08-10
相关资源
最近更新 更多