【问题标题】:Function for textarea emptytextarea 空函数
【发布时间】:2012-02-27 15:07:35
【问题描述】:

当他的文本区域为空时,是否有办法在聊天中实现“另一个用户没有打字”,而当文本区域至少有一个字符时,“另一个用户正在打字”?

首先,我想通过每 2 秒检查一次用户是否正在按键来实现这个“正在输入”功能,但我意识到这会使聊天速度太慢。当文本区域不为空(用户正在输入)并且为空时,它是一种提取信息的简单方法 - 什么都不做。

谢谢。

【问题讨论】:

  • 使用keydown 处理程序。如果用户用字符填充文本框,则发送“正在输入”消息,如果用户清空文本框,则发送空消息(以清除消息输出)。
  • 谢谢,我会试试看能不能写代码。

标签: javascript chat


【解决方案1】:

在第一个keyup 发送“正在输入”消息,并在10 秒左右后使用window.setTimeout 发送“未输入”消息。取消并重新安排每次按键时的 setTimeout。

以下未经测试的示例:

var input = document.getElementById('typeeBox');
var isTyping = false;
var timeoutId = 0;

function stoppedTyping() {
    isTyping = false;
    // Send not typing message.
    // Update db status.
}

function startedTyping() {
    if (!isTyping) {
        // Send is typing message.
        // Update db status.
        isTyping = true;
        timeoutId = window.setTimeout(stoppedTyping, 10000);
    } else {
        window.clearTimeout(timeoutId);
        timeoutId = window.setTimeout(stoppedTyping, 10000);
    }
}

input.addEventListener('keyup', startedTyping, false);

【讨论】:

  • 谢谢,我现在要测试这段代码。只是一个简单的问题,超时会影响我在聊天中已有的计时器吗?以防万一,我将暂时尝试不使用它的代码。
  • setTimeout 应该简单地安排另一个函数运行,除了你已经运行的函数。同样,clearTimeout 只会清除传递给它的timeoutId 运行的函数。
  • 工作,谢谢一百万。我可以再问你一件事。我在数据库中创建了 2 列,一列用于“成员输入状态”,另一列用于“操作员输入状态”并分配为 0。现在我有点迷失了,我应该在您的代码中在哪里指示数据库请求以获取其他用户的状态而不是我的。
  • 更新了代码以指示您将在何处更新数据库。至于哪个字段,我想您的身份验证将确定是operator 还是member
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多