【问题标题】:testing 2-player socket.io game. updating a label is affecting both pages测试 2 人 socket.io 游戏。更新标签会影响两个页面
【发布时间】:2017-03-14 19:51:50
【问题描述】:

我不明白为什么更新一个页面上的标签会影响另一个页面上的标签。我不认为 DOM 是这样共享的。打开一个标签或页面成功将标签更新为“player1”,但是当我打开另一个标签/页面时,它会将两个标签都更新为“player2”。

<script>
var socket = io.connect('http://localhost:3000');
socket.on('connect', function() {
socket.emit('join');
socket.on('joinSuccess', function (playerSlot) {
  if (playerSlot === 'player1') {
   $("#playerID").text("you are player1");
} else if (playerSlot === 'player2') {
   $("#playerID").text("you are player2");
  }
}); //end joinSuccess
}); //end connect

我只是想通知用户他们是哪个玩家。


解决方案:

 else if (playerSlot === 'player2') {
    var elm = $("#playerID");
    var empty = !elm.text().trim();
    if (empty) {
      elm.text("you are " + playerSlot);
        }
      }

【问题讨论】:

  • 新用户加入时是否推送“joinSuccess”消息?在这种情况下,此消息将被传递到具有相同 playerSlot 值的两个页面。因此,所有页面都将更新最后加入的玩家名称。
  • 我不是 socket.io 方面的专家,但似乎joinSuccess 在新标签打开时会在所有现有标签上触发。

标签: javascript jquery socket.io


【解决方案1】:

当新用户加入时,您是否推送“joinSuccess”消息?在这种情况下,此消息将被传递到具有相同 playerSlot 值的两个页面。所以,所有页面都会更新最后加入的玩家名字。

在这种情况下,你可以用简单的条件来处理,

socket.on('joinSuccess', function (playerSlot) {
  var elm = $("#playerID"); 
  if (!elm.text().trim()) {
    elm.text("you are " + playerSlot);
  }
});

【讨论】:

  • $("#playerID").text() 最初是空的还是有一些默认值?
  • 对不起,我在 if 之外还有我的旧语句。一旦我删除它,它就起作用了。
  • 该条件检查文本是否为空?所以对于 player1 页面,你不用管它吗?
  • 是的。它检查标签是否为空。如果它已经更新 - 它不会进入进一步更新的条件
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2020-09-22
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多