@neodekvat09

Чат на socket.io — в чём ошибка?

Здравсвтуйте, недавно загорелся желанием написать чат. Вроде как всё получалось, но как решил добавить ники, то всё пошло как-то не очень...
Сейчас, после ввода ника ничего не происходит, страница почему-то просто релоудится, хотя должна показать само окно чата.
Вот исходники:
Index.html
<body>
<div class="setNickname-wrap">
	<form class="nick-form">
		<input type="text" class="nickname">
		<!-- <input type="submit" class="add" value='Enter a nickname'> -->
		<input type='submit' class="add" value='Enter a nickname'>
	</form>
	<p class="nick-error"></p>
</div>


<div class="chat-wrap">
	<ul id="messages"></ul>
	<form class='send-message'>
		<input type="text" id="input" autocomplete="off">
		<input type='submit' class='send' value='Send'>
	</form>

	<div class="online-users"></div>
</div>


<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io(),
	sendMessage = $('.send-message'),
	nickWrap = $('.setNickname-wrap'),
	chatWrap = $('.chat-wrap'),
	nickInput = $('.nick'),
	nickForm = $('.nick-form'),
	nickError = $('.nick-error'),
	onlineUsers = $('online-users');

chatWrap.hide();
nickForm.submit(function(){
	socket.emit('new user', nickInput.val(), function(data){
		if(data){
			nickWrap.hide();
			chatWrap.show();
		} else {
			nickError.html("That username is already taken.");
		}
	});
	// nickInput.val('');
});

socket.on('usernames', function(data){
	var html = '';
	for(i = 0; i < data.length; i++){
		html += data[i] + '<br>';
	}
	onlineUsers.html(html);
});

sendMessage.submit(function(){
	socket.emit('chat message', $('#input').val());
	$('#input').val('');
	return false;
});

socket.on('chat message', function(msg){
	// $('#messages').append($('<li>').text(msg));
	$('#messages').append('<li><b>' + data.nick + ': </b>' + data.msg + '</li>' + '<br>');
});
</script>
</body>

server.js
var app = require('express')()
	http = require('http').Server(app),
	io = require('socket.io')(http),
	nicknames = [];

app.get('/', function(req, res){
	res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){

	socket.on('new user', function(data, callback){
		if(nicknames.indexOf(data) != -1){
			callback(false);
		} else {
			callback(true);
			socket.nickname = data;
			nicknames.push(socket.nickname);
			updateNicknames();
		}
	});

	function updateNicknames(){
		io.emit('usernames', nicknames);
	}

	socket.on('send message', function(data){
		io.emit('new message', {msg: data, nick: socket.nickname});
	});

	socket.on('disconnect', function(data){
		if(!socket.nickname) return;
		nicknames.splice(nicknames.indexOf(socket.nickname), 1);
		updateNicknames();
	});
});

http.listen(3000, function(){
	console.log('listening on 127.0.0.1:3000');
});
  • Вопрос задан
  • 942 просмотра
Решения вопроса 1
@Aves
Нужно отменить действие по умолчанию отправки формы для ника, как отменено в форме сообщения:
nickForm.submit(function(){
  ...
  return false;
});

И еще класс исправить
<input type="text" class="nickname"> не совпадает с nickInput = $('.nick')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
edli007
@edli007
full stack, team lead
а что пишет?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы