У меня есть "текст типа ввода" и выбор. Варианты выбора: говорят, шепотом, кричат. Я хочу раскрасить пример текста: если selection.value - «сказать», то цвет будет красным. Вот мой код для этого:
<script src = "/socket.io/socket.io.js"></script>
<script>
let akarmi = undefined;
var socket = io.connect('http://192.168.0.113:3000');
const input = document.getElementById('inp');
const button = document.getElementById('sub');
const container = document.createElement("div");
input.id = "messeage-input";
button.id = "messeage-send";
container.id = "messeage-container";
document.body.appendChild(input);
document.body.appendChild(button);
document.body.appendChild(container);
socket.on("message", function (data) {
const value = document.getElementById("select").value;
const span = document.createElement("span");
console.info(data.type)
const text_node = document.createTextNode(data.ip.substring(17, 20) + ": [" + data.type + "]: " + data.message);
if (value == "whisp") {
//span.style.backgroundColor = "rgb(60,60,70)";
span.style.color = "rgb(120,60,120)";
}
if (value == "yell") {
//span.style.backgroundColor = "rgb(60,70,60)";
span.style.color = "rgb(60,180,120)";
}
if (value == "say") {
//span.style.backgroundColor = "rgb(70,60,60)";
span.style.color = "rgb(120,60,60)";
}
span.appendChild(text_node);
container.appendChild(span);
container.appendChild(document.createElement("br"));
console.info((performance.now() - akarmi)/1000);
console.info("asdas");
});
button.onclick = function (event) {
socket.emit("message", {message: input.value});
socket.emit("type", {type: document.getElementById("select").value});
input.value = "";
console.info("lefut");
akarmi = performance.now();
}
</script>
а в server.js я не могу определить data.type:
io.on('connect', function(socket){
socket.on("message", function (data) {
data.ip = socket.handshake.address;
data.type = socket.on("type", function (data){
io.emit('type', data)
console.info(data)
});
io.emit("message", data);
});
});
И это возвращается с ошибкой: RangeError: превышен максимальный размер стека вызовов
Может кто-нибудь мне помочь?
Вы генерируете событие сообщения всякий раз, когда получаете событие сообщения. Измените событие message
на что-то вроде serverMessage
и clientMessage
.
Чтобы код сервера выглядел так:
io.on('connect', function(socket){
socket.on("clientMessage", function (data) {
data.ip = socket.handshake.address;
data.type = socket.on("clientType", function (data){
io.emit('serverType', data)
console.info(data)
});
io.emit("serverMessage", data);
});
});
Аналогичное изменение необходимо сделать и на стороне клиента.