Socket io/计数单选按钮的个数"ok"

socket io/ count the number of radio button "ok"

本文关键字:quot ok 单选按钮 io Socket      更新时间:2023-09-26

我想计算一下有多少用户使用" btk "的单选按钮,如果你能帮忙,我很高兴。

enter code here<div class="sample clearfix">
    <input type="radio" name="s2" id="off" value="0" checked="checked">
    <label for="off" class="switch-off" id="btnng">う〜ん。。</label>
    <input type="radio" name="s2" id="on" value="1">
    <label for="on" class="switch-on" id="btnok">なるほど!</label>
</div>

server.js如下:

我可以数出有多少用户正在登录,但是我无法及时计算单选按钮的状态(实时)。

如果你能帮助我,我很高兴。
var http = require('http');
var path = require('path');
var socketio = require('socket.io');
var express = require('express');
var router = express();
var server = http.createServer(router);
var io = socketio.listen(server);
router.use(express.static(path.resolve(__dirname, 'public')));
var clients = [];
io.on('connection', function (socket) {
  console.log("ID: "+socket.id.substring(2)+"has connected");
  clients[socket.id] = {
    vote:''
  };
  io.sockets.emit('count', socket.client.conn.server.clientsCount);
  socket.on('vote', function(data){
    clients[socket.id].vote = data; // good or bad
    var result = calcVote(clients);
    io.sockets.emit('vote', result);
  });
  socket.on('disconnect', function() {
    delete clients[socket.id];
    io.sockets.emit('count', socket.client.conn.server.clientsCount);
  });
});
var calcVote = function(calcclients){
  var sums = {
    good:0,
    bad:0
  };
  calcclients.forEach(function(client){
    switch (client.vote) {
      case 'good' :
      sums.good += 1;
      break;
      case 'bad' :
      sums.bad += 1;
      break;
    }
  });
  return sums;
};
server.listen(process.env.PORT || 3010, process.env.IP || "0.0.0.0", function(){
  var addr = server.address();
  console.log("Chat server listening at", addr.address + ":" + addr.port);
});
node.js socket.io

您正在将clients变量声明为数组,但您没有将其用作数组。相反,您只是将属性分配给clients变量,而不是数组元素。因此,当您尝试使用.forEach()来迭代连接的用户时,它不会做您想要的事情,因为.forEach()只迭代数组元素,但是您只是将属性分配给数组,而不是数组元素。所以,你的.forEach()不迭代任何东西。

更改为:

var clients = {};

然后,使用迭代方法迭代属性,如for/infor/of,或者将属性名称放入具有Object.keys()的数组中并迭代它们。

例如:

var calcVote = function(calcclients){
  var sums = {
    good:0,
    bad:0
  };
  Object.keys(calcclients).forEach(function(id){
    var client = calcclients[id];
    switch (client.vote) {
      case 'good' :
      sums.good += 1;
      break;
      case 'bad' :
      sums.bad += 1;
      break;
    }
  });
  return sums;
};