由两个用户通过websockets编辑输入的问题

时间:2016-03-18 02:42:05

标签: javascript node.js websocket socket.io

我试图使用socket.io来实现与两个用户使用相同输入字段的功能 Idea看起来像这样:

  1. 用户输入数据
  2. 数据转到后端
  3. 所有连接客户端的后端广播数据
  4. 但是当我试图输入一个字符时 - 整个输入值以某种方式被设置为“”(字面上没什么) 也许我应该以另一种方式处理数据流?

    将数据发送到后端并在响应时获取它的客户端代码:

        $('input').keydown(function(){
           socket.emit('chat message', $('input').val());
           console.log($('input').val());
           return false;
        });
        socket.on('chat message', function(msg){
          $('input').val(msg);
        });
    

    后端代码,仅用于在所有连接的客户端上广播数据:

    io.on('connection', function(socket){
      socket.on('chat message', function(msg){
        io.emit('chat message', msg);
      });
    });
    

    GitHub回购链接:https://github.com/eko24/websocket-input

1 个答案:

答案 0 :(得分:1)

<input>事件被触发时,keydown标记的值尚未更改,因此您无法看到刚刚按下的键的效果。

相反,您可以使用&#34;输入&#34;表示用户更改<input>值的事件:

&#13;
&#13;
$("input").on("input", function(e) {
    log($("input").val());
});

function log(x) {
    var div = document.createElement("div");
    div.innerHTML = x;
    document.body.appendChild(div);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input>
&#13;
&#13;
&#13;