Общие > Гостевая Webscript.Ru Network
Ошибки на форуме сюда.
andymc:
файл: /vbcode.js
Функция: vbcode()
Строка файла: 106
--- Код: ---
theform.message.value += "["+vbcode+"]";
arraypush(tags,vbcode);
--- Конец кода ---
Эту строку надо заменить на:
--- Код: ---
!insertTag(theform.message,vbcode) ? arraypush(tags,vbcode) : true ;
--- Конец кода ---
Снизу файла /vbcode.js вставить функцию:
--- Код: ---
function insertTag(field,tag,one) {
codes=\'[\'+tag+\']\'
codee=\'[/\'+tag+\']\'
returned = false
field.focus();
decrement=0
if (!document.all&&!field.selectionStart){
field.selectionStart=1
decrement=1
}
if (field.selectionStart){
var msg = field;
var val = msg.value;
msg.value = val.substring(0, msg.selectionStart-decrement) + codes +
val.substring(msg.selectionStart-decrement, msg.selectionEnd) + codee +
val.substring(msg.selectionEnd, val.length);
return true;
}
if (typeof(document.selection) == \'undefined\') {
field.value = field.value + codes // + codee;
returned = false
} else {
var rng = document.selection.createRange( );
if (rng.text) {
document.selection.createRange().text = codes + rng.text + codee;
returned = true
} else {
field.value = field.value + codes // + codee;
returned = false
}
field.focus();
}
return returned
}
--- Конец кода ---
Что было: строка theform.message.value += "["+vbcode+"]"; просто прибавляла код [тег] к значению поля.
Что теперь: Функция insertTag() в отличие от этой строки ПЫТАЕТСЯ найти текст, который выделен, и заключить его в тег.
Если ничего не выделено, то функция действует как прежняя строка
arraypush(tags,vbcode); - тег считается открытым, если функция возвратит true
Резюме: я просто предложил. Ваше дело, попробовать или нет
NAS:
что не так ? не сработало
andymc:
Что конкретно? Какой бразуер?
В Мозилла есть проблема: вставляется сразу оба тега в позоцию.
В IE вроде бы всё нормально.
Пытался исправить, пока не получается.
NAS:
Хм, действительно работает, видимо дома все закешировалось сильно.
andymc:
Замечание
Реализация получилась такой сложной, т.к. техника selection разная у обоих браузеров, да ещё в Mozilla есть ошибка небольшая (решается с помощью кода \' decrement=0 if (!document.all&&!field.selectionStart){ field.selectionStart=1; decrement=1;}) \'
Горячие клавиши
Вообще-то реализация горячих клавиш такая (придумано yandex)
--- Код: ---key={
needkey:function(e) {
var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
if ((code == 13) && (e.ctrlKey == true) && (e.altKey == false)) document.forms.vbform.submit(); // ctrl + enter
if ((code == 66) && (e.ctrlKey == true) && (e.altKey == false)) vbcode(document.forms.vbform,\'B\',\'\'); // ctrl + B
if ((code == 73) && (e.ctrlKey == true) && (e.altKey == false)) vbcode(document.forms.vbform,\'I\',\'\'); // ctrl + I
if ((code == 85) && (e.ctrlKey == true) && (e.altKey == false)) vbcode(document.forms.vbform,\'U\',\'\'); // ctrl + U
}
}
if (document.getElementById) {
document.onkeydown = key.needkey;
}
--- Конец кода ---
Вставляется этот код после формы, иначе он её не видит.
Проблема: горячие клавиши например ctrl+b используются также в браузере. И работает это ужасно.
Резюме: делать не рекомендуется. Вышеприведённый код можете записать в копилку полезных решений!
Навигация
Перейти к полной версии