首页 > 解决方案 > 查看其他人何时键入

问题描述

我使用 socket.io 制作了一个聊天应用程序

我想制作一个功能,可以在其他用户输入消息时告诉某人。最初我的代码正在运行,但由于某种原因它停止了。聊天功能很好用。

客户端

//Query DOM
var message = document.getElementById('message');
    handle = document.getElementById('handle'),
    btn = document.getElementById('send'),
    output = document.getElementById('output'),
    feedback = document.getElementById('feedback');

//emit Events
btn.addEventListener('click', function(){
    socket.emit('chat', {
        message: message.value,
        handle: handle.value
    });
});

message.addEventListener('keypress', function(){
    socket.emit('typing', handle.value);
});

//Listen for events
socket.on('chat', function(data){
    feedback.innerHTML = "";
    output.innerHTML += '<p><strong>' + data.handle  + ' </strong>' + data.message + ' </p>';
});

// socket.on('typing', function(data){
//     feedback.innerHTML = '<p><em>' + data + ' is typing a message....</em></p>';
// });

socket.on('typing', function(data){
    if (data) {
      feedback.innerHTML = '<p><em>' + data + ' is typing...</em></p>';
    } else {
      feedback.innerHTML = ''
    }
});

服务器端

var io = socket(server);

io.on('connection', function(socket){
    console.log('Made socket connection', socket.id);

    socket.on('chat', function(data) {
        io.sockets.emit('chat', data);
    });
});

标签: node.jssocket.io

解决方案


服务器端代码似乎没有响应客户端发送给它的“打字”事件的功能。

在你的

io.on('connection', function(socket){
    console.log('Made socket connection', socket.id);

    socket.on('chat', function(data) {
        io.sockets.emit('chat', data);
    });
});

阻止您需要包含服务器在从客户端接收到“打字”事件时可以发送给客户端的响应。

就像是

socket.on('typing', function(data){
    io.sockets.emit('userState', {user: bleh, typing: 
    true})
})

推荐阅读