€
$
₴
₽
EN
RU
Vmeste.EU
Лента
Каталог
Файлы
Форумы
Услуги
Основное
Radiotalk
Пользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90 •
Посмотреть все темы
Несколько получателей в поле сообщения.
1
2
80
Alex123456
@Alex123456
04.02.2012
Здравствуйте, пользовался способом, чтобы выбирать несколько человек для сообщения (https://vmeste.eu/forum?pid=181908#p181908).
Как сделать так, чтобы после отправки список получателей остался нетронутым? т.е. пример:
1: 2: 3: Привет!
*нажимаю Enter*
1: 2: 3:
где 1,2,3 - ники юзеров.
80
Alex123456
@Alex123456
05.02.2012
Update: не могу найти в "Вывод простого сообщения" указатель на сброс текста в окошке..никто не подскажет?
или это ненужный костыль?
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
Update: не могу найти в "Вывод простого сообщения" указатель на сброс текста в окошке..никто не подскажет?
или это ненужный костыль?
В каком окошке? Поставьте в форму кнопку
<input type="reset" value="сброс" />
, которая приводит все поля формы к значению по умолчанию, сбрасывает.
Ну или любую кнопку/ссылку с
onclick="form.reset()"
.
Если надо сбросить не всю форму, а обнулить допустим поле ввода сообщения, то скрипт будет такой:
chat.document.fmsg.text0 = "";
80
Alex123456
@Alex123456
05.02.2012
нет-нет, мне нужно иное.
Смотрите: вот тут
https://vmeste.eu/forum?pid=181908#p181908
говорится, что чтобы была возможность писать нескольким людям, надо удалить строку
<input type=text title='Очистить поле' onclick='tonick.value="";if(cmd) cmd.value="";' class=ok name=tonick size=10 style='cursor:hand;' readonly>
Это приводит к тому, что поле, в котором выбран получатель, вообще убирается и, нажав на ник пользователя, его имя появится прям в строке сообщений. После отправки сообщения из этой строки всё исчезает (оно и понятно, подготовка к новому сообщению). Можно ли как-то сделать, чтобы при отправке сообщения ники получателей оставались в строке ввода, а текст сбрасывался. То есть.
Предположим ники пользователей А, В и С.
*я выбираю эти ники и здороваюсь*
А: B: C: привет!
*нажимаю Enter, что должно остаться в итоге*
A: B: C:
думаю, это как-то можно реализовать, раз уж выбранные ники объявляются как tonick
-------------------------------------------------------------------------
Дерзкая мысль: а
chat.document.fmsg.text0 = 'tonick'
не приведет ли к очистке всего, кроме выбранных ников?
Отредактировано Alex123456 -
05.02.2012
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
нет-нет, мне нужно иное.
Смотрите: вот тут
https://vmeste.eu/forum?pid=181908#p181908
говорится, что чтобы была возможность писать нескольким людям, надо удалить строку
<input type=text title='Очистить поле' onclick='tonick.value="";if(cmd) cmd.value="";' class=ok name=tonick size=10 style='cursor:hand;' readonly>
Это приводит к тому, что поле, в котором выбран получатель, вообще убирается и, нажав на ник пользователя, его имя появится прям в строке сообщений. После отправки сообщения из этой строки всё исчезает (оно и понятно, подготовка к новому сообщению). Можно ли как-то сделать, чтобы при отправке сообщения ники получателей оставались в строке ввода, а текст сбрасывался. То есть.
Предположим ники пользователей А, В и С.
*я выбираю эти ники и здороваюсь*
А: B: C: привет!
*нажимаю Enter, что должно остаться в итоге*
A: B: C:
думаю, это как-то можно реализовать, раз уж выбранные ники объявляются как tonick
-------------------------------------------------------------------------
Дерзкая мысль: а
chat.document.fmsg.text0 = 'tonick'
не приведет ли к очистке всего, кроме выбранных ников?
Если я правильно помню, в tonick попадает только первый ник. Поэтому chat.document.fmsg.text0 = 'tonick' приведет к от
"А: B: C: привет"
к
"A:"
(на 100% не уверен, надо проверять).
Сделайте скрытое поле old_tonick, при отправке сообщения сохраняйте список ников в него и после отправки восстанавливайте список ников.
Отредактировано BETEPAH -
05.02.2012
80
Alex123456
@Alex123456
05.02.2012
У меня, кстати, не получилось совместить SUBMIT на кнопке "Отправить" с chat.document.fmsg.text0 = 'tonick'
80
Alex123456
@Alex123456
05.02.2012
Сделайте скрытое поле old_tonick, при отправке сообщения сохраняйте список ников в него и после отправки восстанавливайте список ников.
не подскажете, как?
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
Сделайте скрытое поле old_tonick, при отправке сообщения сохраняйте список ников в него и после отправки восстанавливайте список ников.
не подскажете, как?
Примерно так, думаю:
/* Обрабатывает строку ввода текста для отправления */
var gettime = 0;
var oldmsg = "";
var old_tonick = "";
...
msg_cmd = '';
msg_nick = '';
msg_text = '';
if (msg.charAt(0) == "/") {
msg_cmd = msg.substr(0, msg.indexOf(" ") + 1);
msg = msg.substr(msg.indexOf(" ") + 1);
}
msg_nick = msg.substr(0, msg.indexOf(": ") + 1);
old_tonick = msg_nick;
msg_text = msg.substr(msg.indexOf(": ") + 1);
...
oldmsg = msg;
form.text0.value =
old_msg
;
form.text0.focus();
form.text.value = msg;
80
Alex123456
@Alex123456
05.02.2012
Попробовал. Сообщения вообще перестают отправляться.
Кстати, я нигде не нашел
old_msg
, нашел только
oldmsg
. Подумал, что опечатка и убрал нижнее подчеркивание. Сообщения стали отправляться нормально! Но решить проблему не помогло всё равно.
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
Попробовал. Сообщения вообще перестают отправляться.
Кстати, я нигде не нашел
old_msg
, нашел только
oldmsg
. Подумал, что опечатка и убрал нижнее подчеркивание. Сообщения стали отправляться нормально! Но решить проблему не помогло всё равно.
прошу прощения, опечатался, конечно.
/* Обрабатывает строку ввода текста для отправления */
var gettime = 0;
var oldmsg = "";
var old_tonick = "";
...
msg_cmd = '';
msg_nick = '';
msg_text = '';
if (msg.charAt(0) == "/") {
msg_cmd = msg.substr(0, msg.indexOf(" ") + 1);
msg = msg.substr(msg.indexOf(" ") + 1);
}
msg_nick = msg.substr(0, msg.indexOf(": ") + 1);
old_tonick = msg_nick;
msg_text = msg.substr(msg.indexOf(": ") + 1);
...
oldmsg = msg;
form.text0.value =
old_tonick
;
form.text0.focus();
form.text.value = msg;
80
Alex123456
@Alex123456
05.02.2012
/* Обрабатывает строку ввода текста для отправления */
var gettime=0;
var oldmsg="";
var old_tonick = "";
function msg_send(){
str_plus(0);
var form=document.fmsg;
var msg=form.text0.value;
if (form.tonick) {if(form.tonick.value!='Всем') {msg=form.tonick.value+msg;}}
if (form.cmd) {msg=form.cmd.value+msg; if(form.cmd.value!='/privat ') form.cmd.value='';}
if (msg=='') return false;
msg_cmd='';msg_nick='';msg_text='';
if(msg.charAt(0)=="/") {
msg_cmd=msg.substr(0,msg.indexOf(" ")+1);
msg=msg.substr(msg.indexOf(" ")+1);
}
msg_nick=msg.substr(0,msg.indexOf(": ")+1);
old_tonick = msg_nick;
msg_text=msg.substr(msg.indexOf(": ")+1);
if(msg_nick.search(/ /)!=-1) {msg_nick=""; msg_text=msg;}
msg_text=abc_flood(msg_text);
msg_text=translit(msg_text);
msg=msg_cmd+msg_nick+msg_text;
oldmsg = msg;
---- этой строки у меня, кстати, вообще не было.
form.text0.value = oldmsg;
----- и вот тут пришлось убрать нижнее подчеркивание, иначе не отправляет сообщения. Вроде как. Если не ошибаюсь.
form.text0.focus();
form.text.value=msg;
Вот так сохраняется всё сообщение вместе со всеми получателями.
----------------------------------------------
Так, как предлагаете Вы - сохраняет только первый ник (как кто-то тут на форуме и просил). Видимо, каждый следующий ник воспринимается одновременно как вложенный и как не вложенный 🙁
Отредактировано Alex123456 -
05.02.2012
1007
BETEPAH
@BETEPAH
05.02.2012
Обратите внимание, я исправил свою опечатку во втором коде
form.text0.value =
old_tonick
;
80
Alex123456
@Alex123456
05.02.2012
да, вижу. Вот если так, через
old_tonick
, то после отправки остается только первый из числа выбранных.
Отредактировано Alex123456 -
05.02.2012
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
да, вижу. Вот если так, через
old_tonick
, то после отправки остается только первый из числа выбранных.
да, все верно msg_nick=msg.substr(0,msg.indexOf(": ")+1) берет только то, что идет до двоеточия с пробелом (включительно) в строке сообщения.
Надо писать регулярное выражение для нахождения в сообщении "(слово, двоеточие, пробел, слово, двоеточие, пробел) остальное сообщение".
80
Alex123456
@Alex123456
05.02.2012
Ох, спасибо, попробую разобраться с этим 😀
не могли бы Вы посмотреть на другую мою проблему?
https://vmeste.eu/forum?tid=15483
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
Ох, спасибо, попробую разобраться с этим 😀
Попробуйте так:
/* Обрабатывает строку ввода текста для отправления */
var gettime = 0;
var oldmsg = "";
var old_tonick = "";
...
msg_cmd = '';
msg_nick = '';
msg_text = '';
if (msg.charAt(0) == "/") {
msg_cmd = msg.substr(0, msg.indexOf(" ") + 1);
msg = msg.substr(msg.indexOf(" ") + 1);
}
msg_nick = msg.substr(0, msg.indexOf(": ") + 1);
old_tonick = /^(?:\S+:\s)+/.exec(msg);
msg_text = msg.substr(msg.indexOf(": ") + 1);
...
oldmsg = msg;
if (old_tonick) form.text0.value = old_tonick; else form.text0.value = "";
form.text0.focus();
form.text.value = msg;
Недостаток этого выражения - на нике, содержащем в себе пробел, этот скрипт прервется.
**********
для экспериментов с этим регулярным выражением.
80
Alex123456
@Alex123456
05.02.2012
Огромное Вам спасибо! Сейчас буду разбираться в коде.
Ещё раз гигантское спасибо 😀
Стыдно просить, конечно, но в топике с настройками там что-то совсем очевидное, до чего мне не хватает ума. Не могли бы посмотреть на досуге ещё раз?
1007
BETEPAH
@BETEPAH
05.02.2012
Alex123456
пишет:
Огромное Вам спасибо! Сейчас буду разбираться в коде.
Ещё раз гигантское спасибо 😀
Стыдно просить, конечно, но в топике с настройками там что-то совсем очевидное, до чего мне не хватает ума. Не могли бы посмотреть на досуге ещё раз?
Надо смотреть по месту. Дайте адрес чата, пожалуйста. Только скорее всего уже завтра посмотрю.
80
Alex123456
@Alex123456
07.02.2012
Если надо сбросить не всю форму, а обнулить допустим поле ввода сообщения, то скрипт будет такой:
chat.document.fmsg.text0 = "";
Не получается. Пишу так:
<input type=button onclick="chat.document.fmsg.text0 = "";">
И не очищается.
1007
BETEPAH
@BETEPAH
07.02.2012
Alex123456
пишет:
Если надо сбросить не всю форму, а обнулить допустим поле ввода сообщения, то скрипт будет такой:
chat.document.fmsg.text0 = "";
Не получается. Пишу так:
<input type=button onclick="chat.document.fmsg.text0 = "";">
И не очищается.
chat.document.fmsg - должно указывать на форму отправки сообщения. Если у вас 3я версия движка, скорее всего должно быть
document.fmsg.text0.value = ""
если кнопка стоит в нижнем фрейме или
parent.chat.document.fmsg.text0.value = ""
- для любого местоположения кнопки.
Если у вас 4я версия, наверное так -
document.fmsg.text0.value = ""
- надо проверять, я не знаю верстку 4й версии (у меня используется фреймовая, третья).
Отредактировано BETEPAH -
07.02.2012