12.09.2016, 17:56
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
События JS + NODEJS
Добрый вечер, Господа, помогите пожалуйста с проблемой.
Вообщем, по сокету присылается инфа, true - false
В шаблоне, прием месаги
socket.on('info', function (data,callback) {
console.log(data);
alert(data)
});
мне нужно, выводить сообщение клиенту дивом, да - нет, использую bootstrap
<div class="alert alert-success" role="alert">True</div>
<div class="alert alert-danger" role="alert">False</div>
Далее что бы дивы закрывались по истечение 5 секунд.
То есть в кратце, приходит событие true, вызывается <div class="alert alert-success" role="alert">True</div>, закрывается через 5 секунд
|
|
12.09.2016, 19:29
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
так а в чем суть проблемы?
проверяем если true то делаем блок alert-success видимым, если false то alert-danger. А потом закрываем через setTimeout.
или я бы вообще один блок сделал и ему присваивал бы класс или succeess или danger а также вписывал в него нужную инфу для пользователя (может быть даже эту инфу с сервера передавал объектом вместо теперишних true\false), а потом бы также через setTimeout закрывал и очищал этот блок.
Последний раз редактировалось Bond, 12.09.2016 в 19:33.
|
|
12.09.2016, 21:56
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
Я код пример как это выглядеть будет, можно?)
|
|
13.09.2016, 00:17
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
Вообще рекомендуют самому попытаться сделать а если не получится спросить, это и в правилах форума прописано, но дам простой код.
Оставим один блок вместо ваших двух, как и говорил, но добавим ему класс alertInfo что бы не работать со стандартными классами бутстрап
<div class="alert alertInfo" role="alert" style="display: none"></div>
function alertInfo(className, text){
$('.alertInfo').addClass(className).text(text).fadeIn();
setTimeout(function(){
$('.alertInfo').removeClass(className).fadeOut().text('');
}, 5000);
}
socket.on('info', function (data,callback) {
if (data) {
alertInfo('alert-success', 'Сообщение пользователю когда true');
} else {
alertInfo('alert-danger', 'Сообщение пользователю когда false');
}
});
При вызове функции alertInfo во втором параметре можете подставлять свои данные которые пришли с сервера или свой текст - он запишется в блок.
|
|
13.09.2016, 00:42
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
Да уже сам порешал, но спасибо
<div role="alert" hidden="" id = "test"></div>
socket.on('info', function (data) {
console.log(data);
if(data){
var info = document.getElementById("test");
info.style.display = "block";
info.className = 'alert alert-success';
info.innerHTML = 'Успех';
} else {
var info = document.getElementById("test");
info.style.display = "block";
info.className = 'alert alert-danger';
info.innerHTML = 'Ошибка';
}
});
Последний раз редактировалось SpaceAlarm, 13.09.2016 в 01:03.
|
|
13.09.2016, 01:45
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
SpaceAlarm,
гуд. отличное решение, всяко лучше чем чей-то код юзать.
Я на jQuery пилил исходя из того что он все равно есть на странице вместе с bootstrap ну + что бы появление более эффективное сделать без велосипеда.
|
|
13.09.2016, 02:29
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
есть еще не большая проблема,
$('form').submit(function(event){
//$('#submit').modal(options)
event.preventDefault();
socket.emit('test', {
name: $('#test1').val(),
topic: $('#test2').val(),
password: $('#test3').val(),
});
return false;
});
Вообщем если сейчас не расскоментить, //$('#submit').modal(options) то код работает, но данные не отправляются в бд, и не стираются поля ввода, если раскомменить то все работает, //$('#submit').modal(options)
возможно нужно убрать .modal(options)
|
|
13.09.2016, 04:22
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
странная проблема - $('#submit').modal(options) всего лишь должен открывать или закрывать модальное окно
а объект options у вас существует? хотя без него код ниже не работал бы.
В консоле в браузере есть ошибки после отправки формы?
|
|
13.09.2016, 11:22
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
Цитата:
|
"а объект options у вас существует?"
|
В том то и дело что нет, смотри, если закомментирован, то форма отправляется на ноду, но не добавляется в бд + не очищается форма, если расскоменить, то при нажатии форма очищается и отправляется в бд, но не отправляется на ноду
Цитата:
|
В консоле в браузере есть ошибки после отправки формы?
|
Когда расскоменчен, да говорит что option не найден, если закомментирован то ошибок нет
Последний раз редактировалось SpaceAlarm, 13.09.2016 в 11:26.
|
|
14.09.2016, 01:22
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
короче надо весь код смотреть в том числе и часть бекэнда который принимает инфу с формы через сокет
я не понял - что значит форма отправляется в бд, но не отправляется в ноду, и наоборот отправляется в ноду но не отправляется в бд - у тебя что нода одно делает а база другими скриптами пишется?
Форма когда отправляется она отправляется с перезагрузкой страницы?
Там по идее так и должно происходить когда расскоменчена строка о которой говорим - словили ошибку нет options код ниже не работает - то есть не отменяется событие и нет возврата false и страница перезагружается а форма отправляется без ноды, другое дело кто ее принимает.
И что вообще эта строка должна делать? $('#submit').modal(options) - закрывать или открывать модальное окно? В любом случае нельзя ее вызывать с несуществующим options - вызови эту строку вместо options пропиши 'show' если нужно открывать окно с сообщением об отправке или 'hide' если нужно закрывать окно с этой формой.
Последний раз редактировалось Bond, 14.09.2016 в 01:39.
|
|
|
|