// Обрабатывает событие нажатия кнопки
function handleEnter(ctrlVal, ctrlTxt)
{
/*
8 - BackSpace
13 - Enter
*/
var e = event;
switch(e.keyCode)
{
case 8:
GetPositionCursor(ctrlVal, ctrlTxt, 8);
break;
case 46:
GetPositionCursor(ctrlVal, ctrlTxt, 46);
break;
}
}
// Определяет место положения курсора в элементах TEXT или TEXTAREA по нажатию BakSpace или Delete
// [url]http://archives.maillist.ru/13159/429435.html[/url]
function GetPositionCursor(ctrlVal, ctrlTxt, key)
{
var _ctrlTxt = null;
if(ctrlTxt != null)
_ctrlTxt = document.getElementById(ctrlTxt);
if(_ctrlTxt != null)
{
var d = document;
//var s = _ctrlTxt.value;
var insPosL, insPosR, insBeg;
//находим начало и конец выделения или положение курсора
if(ctrlTxt.selectionEnd == null) //IE
{
var ch = 0;
if(d.selection && d.selection.createRange)
{
var tR = d.selection.createRange();
var ch = 'character';
var tR1 = d.body.createTextRange();
}
if(!ch || tR.parentElement && tR.parentElement() != _ctrlTxt)
{
insPosL = insPosR = s.length;
}
else //найти выделенную область
{
var sel;
insPosL = tR.text.length;
if(_ctrlTxt.type == 'textarea')
{
tR1.moveToElementText(_ctrlTxt);
tR.setEndPoint('StartToStart',tR1);
insPosR = tR.text.length;
}
else
{
tR.moveStart('textedit', -1);
insPosR = tR.text.length;
tR.moveToElementText;
}
insPosL = insPosR - insPosL; //-эмул. selectionEnd (IE)
}
}
else //FF,Opera
{
insPosL = _ctrlTxt.selectionStart;
insPosR = _ctrlTxt.selectionEnd;
if(insBeg && self.opera && !insPosL && !insPosR)
{
insPosL = insPosR = _ctrlTxt.value.length;
insBeg = 0;
}
//найден выделенный текст
}
SearchText(ctrlVal, ctrlTxt, insPosL, insPosR, key)
}
}
// Производит поиск удаляемого текста из text или textarea по нажатию BakSpace или Delete
// при любом месте положения курсора
function SearchText(ctrlVal, ctrlTxt, insPosL, insPosR, key)
{
var _ctrlVal = null; // Скрытый текс
var _ctrlTxt = null; // Элемент text или textarea
var argsVal = null; // Массив из кода
var argsTxt = null; // Массив из текста
var endPosInx = 0; // Начальная позиция в цепочке
var startPosInx = 0; // Конечная позиция в цепочке
var delTxt = null;
var delVal = null;
var val = "";
var txt = "";
if(ctrlVal != null && ctrlTxt != null)
{
_ctrlVal = document.getElementById(ctrlVal);
_ctrlTxt = document.getElementById(ctrlTxt);
}
if(_ctrlVal != null && _ctrlTxt != null)
{
argsTxt = _ctrlTxt.value.split(";");
argsVal = _ctrlVal.value.split(";");
if(argsTxt.length < 2)
{
_ctrlVal.value = "";
_ctrlTxt.value = "";
}
else
{
for(var i = 0; i < argsTxt.length; i++)
{
// МЕСТО ПОЛОЖЕНИЯ КОНЕЧНОЙ ТОЧКИ ИМЕНИ В ЦЕПОЧКЕ
if(argsTxt.length > i + 1) // в случае когда в элементе text или textarea
endPosInx += argsTxt[i].length + 1; // 1 это ";"
else
endPosInx += argsTxt[i].length;
// МЕСТО ПОЛОЖЕНИЯ НАЧАЛЬНОЙ ТОЧКИ ИМЕНИ В ЦЕПОЧКЕ
if(insPosL <= endPosInx && key == 8) // при BackSpace
{
if(argsTxt.length > i + 1)
{
startPosInx = endPosInx - argsTxt[i].length - 1;
}
else
{
startPosInx = endPosInx - argsTxt[i].length;
}
}
else if(insPosL < endPosInx && key == 46) // при Delete
{
if(argsTxt.length > i + 1)
{
startPosInx = endPosInx - argsTxt[i].length - 1;
}
else
{
startPosInx = endPosInx - argsTxt[i].length;
}
}
// НАХОДИТ И ВЫДЕЛЯЕТ ТЕКСТ
if(startPosInx < insPosL && endPosInx >= insPosL && key == 8)
{
if(argsTxt.length == i + 1)
{
SelectValue(ctrlVal, argsVal[i]);
SelectText(ctrlTxt, argsTxt[i]);
}
else
{
SelectValue(ctrlVal, argsVal[i] + ";");
SelectText(ctrlTxt, argsTxt[i] + ";");
}
}
else if(startPosInx <= insPosL && endPosInx > insPosL && key == 46)
{
if(argsTxt.length == i + 1)
{
SelectValue(ctrlVal, argsVal[i]);
SelectText(ctrlTxt, argsTxt[i]);
}
else
{
SelectValue(ctrlVal, argsVal[i] + ";");
SelectText(ctrlTxt, argsTxt[i] + ";");
}
}
}
}
}
}
// Производит удаление кода
function SelectValue(ctrl, text)
{
var _ctrl = null;
var txt = null;
if(ctrl != null)
_ctrl = document.getElementById(ctrl);
if(_ctrl != null)
{
txt = _ctrl.value;
txt = txt.replace(text, "");
_ctrl.value = txt;
}
}
// Производит выделение указанного текста
// [url]http://fastcoder.org/articles/?aid=609[/url]
function SelectText(ctrl, text)
{
var _ctrl = null;
var txtRng = null;
if(ctrl != null)
_ctrl = document.getElementById(ctrl);
if(_ctrl != null)
{
if(_ctrl.selectionEnd == null) // IE
txtRng = _ctrl.createTextRange();
else // FF,Opera
txtRng = _ctrl.createRange();
}
if(txtRng != null)
{
if(txtRng.findText(text))
txtRng.select();
}
}
<input id="Val" type="text" value="0001;0002;0003" />
<%--<textarea id="Txt" cols="20" rows="2" onkeydown="handleEnter('Val', 'Txt');">Имя1;Имя2;Имя3</textarea>--%>
<input id="Txt" type="text" value="Имя1;Имя2;Имя3" onkeydown="handleEnter('Val', 'Txt');"/>