Потратил много времени на размышления о том, почему соединение с websocket (операторы "var ..." и "socket.on ...") не работают, если поместить их в функцию, следующую за subsmit:
document.addEventListener('DOMContentLoaded', () => {
document.querySelector('#display_name').innerHTML = localStorage.getItem('display_name');
document.querySelector('#new_channel').onsubmit = () => {
const new_channel_name = document.querySelector('#new_channel_name').value;
console.log(`New channel name: ${new_channel_name}`);
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
socket.on('connect', () => {
console.log("THIS NEVER GETS EXECUTED");
});
};
});
Когда вы перемещаете операторы соединения, соединение, кажется, работает:
document.addEventListener('DOMContentLoaded', () => {
document.querySelector('#display_name').innerHTML = localStorage.getItem('display_name');
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
socket.on('connect', () => {
console.log(`Connected to SOCKET ID: ${socket.id}`);
});
document.querySelector('#new_channel').onsubmit = () => {
const new_channel_name = document.querySelector('#new_channel_name').value;
console.log(`New channel name: ${new_channel_name}`);
};
});
Похоже, что фундаментальное отсутствие понимания чего-то здесь, на моей стороне, но не удача найти объяснения, почему ... Любой может помогите мне понять, почему?
В конечном итоге моя цель - создать приложение для чата, использующее несколько каналов или пространств имен (с сервером Flask, использующим SocketIO), поэтому я хочу создавать соединение только один раз, когда пользователь отправляет форму нового канала, и не раньше, когда клиент не знает, к какому пути / каналу подключаться. И я знаю, что мне придется изменить инициализацию сокета, чтобы включить некоторый путь к каналу не по умолчанию (пока я просто пытаюсь подключить его). Кто-нибудь знает, как это обойти? Спасибо!