2017-03-14 7 views
0

1ページのラベルの更新が別のページのラベルに影響する理由がわかりません。私はDOMがそれほど共有されているとは思わなかった。あるタブまたはページを開くと、ラベルは 'player1'に更新されますが、別のタブ/ pgを開くと、両方のラベルが 'player2'に更新されます。2プレーヤーsocket.ioゲームのテスト。ラベルの更新が両方のページに影響しています

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

新しいユーザーが参加したときに「joinSuccess」というメッセージをプッシュしていますか?そのような場合、このメッセージは同じplayerSlot値を持つ両方のページに渡されます。したがって、すべてのページが最後に参加したプレイヤー名を更新します。 –

+0

私はsocket.ioの専門家ではありませんが、新しいタブが開いたときに既存のすべてのタブで 'joinSuccess'が起動されるようです。 –

答えて

1

あなたが 'joinSuccess' というメッセージをプッシュしていますか?そのような場合、このメッセージは同じplayerSlot値を持つ両方のページに渡されます。したがって、すべてのページが最後に参加したプレイヤー名を更新します。あなたは、単純な条件でこれを扱うことができるような場合には

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

$( "#playerID")。最初にtext()が空であるか、デフォルト値がありますか? –

+0

申し訳ありません私はまだifの外側に私の古い陳述を持っていました。一度それを取り除くと、うまくいった。 – StormCrow

+0

は、テキストが空であるかどうかをチェックする条件ですか?プレイヤー1のページでは、あなたはそれを残していますか? – StormCrow

関連する問題