Показать сообщение отдельно
  #5 (permalink)  
Старый 24.12.2008, 11:28
Новичок на форуме
Отправить личное сообщение для Fr0sT Посмотреть профиль Найти все сообщения от Fr0sT
 
Регистрация: 23.12.2008
Сообщений: 4

Проблема решилась!

var Handled;

// блокировать обработку, если уже поймали событие в OnKeyDown.
function OnKeyPress(ev)
{
	if (Handled) return false;
}

function OnKeyDown(ev)
{	
	Handled = false;
	if (!ev) ev = window.event;
	if (ev.ctrlKey)
	{
		if (ev.keyCode==17) return;
		var tag = "";
		var tag_param = false;
		// определяем тег в зависимости от нажатой клавиши
		switch (key = String.fromCharCode(ev.keyCode).toUpperCase())
		{
			case "B":
			case "U":
			case "I": tag = key; break;
			
			case "Q": tag = "SPOILER"; tag_param = true; break;
			case "R": tag = "URL"; tag_param = true; break;
			
			default: return;
		}
		
		Handled = true;
		
		var edit = ev.target;
		var opentag = (tag_param) ?  ("["+tag+"=\"\"]") : ("["+tag+"]");
		var closetag = "[/"+tag+"]";

		// вставка тегов вокруг выделенного текста
		edit.focus(); // !  ie?
		if (edit.selectionStart==null) // некий неясный финт ушами
		{
			var rng=document.selection.createRange();
			rng.text=opentag+rng.text+closetag;
		}
		else
		{
			var selStart = edit.selectionStart;
		    edit.value = edit.value.substring(0,selStart)+opentag+
						 edit.value.substring(selStart,edit.selectionEnd)+closetag+
						 edit.value.substring(edit.selectionEnd);
			// поставить курсор после открывающего тега (или между кавычками, если они есть
			edit.selectionStart = selStart + opentag.length - ((tag_param) ? 2 : 0);
			edit.selectionEnd = edit.selectionStart;
		}
		// отменить дальнейшую обработку
		ev.returnValue = false;
		ev.stopPropagation();
		ev.preventDefault();
		return false;
	} // if
}

function init()
{
	document.getElementById("msgedit").onkeydown = MemoOnKeyDown;
	document.getElementById("msgedit").onkeypress = MemoOnKeyPress;
}


Теперь еще осталось найти замену ev.target для осла...
Ответить с цитированием