Имитация нажатия стрелок влево/вправо
Здравствуйте! Есть форма, требуется сделать переход влево и вправо по введённому тексту (стрелками как на виртуальной клавиатуре), для этого есть кнопки со стрелками, но я не могу понять принцип как заставить их работать, подскажите решение. Спасибо.
|
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. Как-то так. |
Спасибо, сейчас попробую.
|
Да, я сам додумался как работает, спасибо, помогло!
|
Появилась проблема, заметил что функции хорошо работают с input, но некорректно работают с textarea. При попытке перемещаться влево по тексту перемещается на 2 символа, потом назад на один, снова вперёд на один и назад на один, не работает как надо вобщем. Переход вправо по тексту вообще не пойми как работает переходит через несколько символов, не могу понять в чём проблема.
Добавлю ещё, что функция стирания текста в поле, основанная на тех же функциях работает правильно, вообще не понимаю что к чему. Ещё вопрос:можно ли как-то посмотреть какие функции выполняются и какие аргументы передаются (использую IE7)? |
Вопрос решён, НО осталось проблема со стрелкой в право (когда доходит до новой строки, то встаёт и не движется более) Кто что может подсказать? Функции:
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,
Изобразите на скриншоте Вашу форму и нарисуйте- раскрасьте: что и как нужно в итоге, по крайней мере я пока не понял, чего Вы добиваетесь |
Часовой пояс GMT +3, время: 19:52. |