21.05.2012, 17:03
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Имитация нажатия стрелок влево/вправо
Здравствуйте! Есть форма, требуется сделать переход влево и вправо по введённому тексту (стрелками как на виртуальной клавиатуре), для этого есть кнопки со стрелками, но я не могу понять принцип как заставить их работать, подскажите решение. Спасибо.
|
|
21.05.2012, 17:10
|
Интересующийся
|
|
Регистрация: 11.10.2011
Сообщений: 17
|
|
function doGetCaretPosition () {
var ctrl=document.getElementById('txt');
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
Получать и задавать позицию каретки +1 или -1. Как-то так.
Последний раз редактировалось a1exei, 21.05.2012 в 17:16.
|
|
21.05.2012, 17:12
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Спасибо, сейчас попробую.
|
|
22.05.2012, 00:56
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Да, я сам додумался как работает, спасибо, помогло!
|
|
28.05.2012, 15:51
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Появилась проблема, заметил что функции хорошо работают с input, но некорректно работают с textarea. При попытке перемещаться влево по тексту перемещается на 2 символа, потом назад на один, снова вперёд на один и назад на один, не работает как надо вобщем. Переход вправо по тексту вообще не пойми как работает переходит через несколько символов, не могу понять в чём проблема.
Добавлю ещё, что функция стирания текста в поле, основанная на тех же функциях работает правильно, вообще не понимаю что к чему.
Ещё вопрос:можно ли как-то посмотреть какие функции выполняются и какие аргументы передаются (использую IE7)?
Последний раз редактировалось platitude, 28.05.2012 в 16:30.
Причина: добавление
|
|
28.05.2012, 18:29
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Вопрос решён, НО осталось проблема со стрелкой в право (когда доходит до новой строки, то встаёт и не движется более) Кто что может подсказать? Функции:
function doGetCaretPosition(ctrl) {
var CaretPos=0;
if (ctrl.tagName=='TEXTAREA') {
ctrl.focus();
if (document.selection) {
var sel = document.selection.createRange();
var clone = sel.duplicate();
sel.collapse(true);
clone.moveToElementText(ctrl);
clone.setEndPoint('EndToEnd', sel);
return (clone.text.length);
}
} else {
// IE Support
if (document.selection) {
ctrl.focus();
var Sel=document.selection.createRange();
var SelLength=document.selection.createRange().text.length;
Sel.moveStart('character', -ctrl.value.length);
CaretPos=Sel.text.length-SelLength;
// Firefox support
} else if (ctrl.selectionStart || ctrl.selectionStart=='0')
CaretPos=ctrl.selectionStart;
return (CaretPos);
}}
Вторая функция:
function setCaretPosition(ctrl,pos){
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
} else if (ctrl.createTextRange) {
var range=ctrl.createTextRange();
if (ctrl.tagName=='TEXTAREA') {
pos=pos-(ctrl.value.slice(0,pos).split("\r\n").length-1);
}
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
Последний раз редактировалось platitude, 28.05.2012 в 19:00.
Причина: правка
|
|
30.05.2012, 18:59
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Ребят, кто-нибудь может подсказать, как решить последнюю проблему?
|
|
30.05.2012, 19:09
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Может просто вызывать события нажатие клавиши влево - вправо
|
|
30.05.2012, 19:11
|
Интересующийся
|
|
Регистрация: 27.01.2012
Сообщений: 18
|
|
Сообщение от Deff
|
Может просто вызывать события нажатие клавиши влево - вправо
|
можно и так, но перелазив интернет в поисках как сделать это ничего не смог найти, как это сделать?
|
|
30.05.2012, 19:45
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
platitude,
Изобразите на скриншоте Вашу форму и нарисуйте- раскрасьте: что и как нужно в итоге, по крайней мере я пока не понял, чего Вы добиваетесь
|
|
|
|