Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-Node.js-Socket.io多重触发_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript-Node.js-Socket.io多重触发

Javascript-Node.js-Socket.io多重触发,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在用node.js和socket.io创建一个rochambo游戏,如下所示: 一名玩家下注,并发送给所有玩家。然后,其他玩家可以通过点击“挑战”来选择一个标志。但当他们这样做时,它会多次发出与服务器上下注索引对应的消息。我不知道为什么 我希望你能理解我糟糕的英语。。。谢谢 代码如下: 服务器端: socket.on('createbet', function (player, sign) { var identifiant = socket.id; var gamenumber =

我正在用node.js和socket.io创建一个rochambo游戏,如下所示:

一名玩家下注,并发送给所有玩家。然后,其他玩家可以通过点击“挑战”来选择一个标志。但当他们这样做时,它会多次发出与服务器上下注索引对应的消息。我不知道为什么

我希望你能理解我糟糕的英语。。。谢谢

代码如下:

服务器端:

socket.on('createbet', function (player, sign) {
var identifiant = socket.id;
    var gamenumber = RandomString(20);
    global[gamenumber] = new Array(identifiant,player,sign);
socket.broadcast.emit('newbet', gamenumber, player);
});

socket.on('challenge', function (gamenumber, cleacces, signe, screenname) {
     //This is where I realize that the event challenge is received multiple times
    });
客户端:

socket.on('newbet', function(gamenumber, player) {
   var imageElement = '<div class="'+gamenumber+'"><div>'+player+'</div><div><img class="signchoice'+gamenumber+'" src="images/unknown.png"/><input type="hidden" class="sign'+gamenumber+'" value="" /></div><div><input class="button" type="submit" value="Challenge!" /><input type="hidden" value="'+gamenumber+'"/></div>';
    $('#BetList').append(imageElement);
    $('.signchoice'+gamenumber).click(function () {
        if ($(this).attr('src') == 'images/ro.png'){$(this).attr('src','images/cham.png');$(this).next().val('cham');}
        else if ($(this).attr('src') == 'images/cham.png'){$(this).attr('src','images/bo.png');$(this).next().val('bo');}
        else {$(this).attr('src','images/ro.png');$(this).next().val('ro');}
    });
    $('.button').click(function() {
        var gamenumber = $(this).next().val();
        socket.emit('challenge', gamenumber, $('.sign'+numerodujeu).val(),$('#screenname').val());
    }); });
socket.on('newbet',函数(游戏号,玩家){
var imageElement=''+玩家+'';
$('#BetList')。追加(imageElement);
$('.signchoice'+gamenumber)。单击(函数(){
if($(this.attr('src')=='images/ro.png'){$(this.attr('src','images/cham.png');$(this.next().val('cham');}
如果($(this.attr('src')=='images/cham.png'){$(this.attr('src','images/bo.png');$(this.next().val('bo');}
else{$(this.attr('src','images/ro.png');$(this.next().val('ro');}
});
$('.button')。单击(函数(){
var gamenumber=$(this.next().val();
emit('challenge',gamenumber,$('.sign'+numeriodujeu.val(),$('#screenname').val());
}); });

尝试替换此代码:

$('.button').click(function() {
  var gamenumber = $(this).next().val();
  socket.emit('challenge', gamenumber, $('.sign' +numerodujeu).val(),$('#screenname').val());
});
关于这一点:

$('.button').unbind('click').click(function() {
  var gamenumber = $(this).next().val();
  socket.emit('challenge', gamenumber, $('.sign' + gamenumber).val(), $('#screenname').val());
});
我认为问题是由于您在
.button
上多次绑定了click事件(在每个“newbet”事件上)

下面是一个活生生的例子:

希望有帮助