Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2012, 16:03
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Имитация нажатия стрелок влево/вправо
Здравствуйте! Есть форма, требуется сделать переход влево и вправо по введённому тексту (стрелками как на виртуальной клавиатуре), для этого есть кнопки со стрелками, но я не могу понять принцип как заставить их работать, подскажите решение. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2012, 16:10
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 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 в 16:16.
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2012, 16:12
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Спасибо, сейчас попробую.
Ответить с цитированием
  #4 (permalink)  
Старый 21.05.2012, 23:56
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Да, я сам додумался как работает, спасибо, помогло!
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2012, 14:51
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Появилась проблема, заметил что функции хорошо работают с input, но некорректно работают с textarea. При попытке перемещаться влево по тексту перемещается на 2 символа, потом назад на один, снова вперёд на один и назад на один, не работает как надо вобщем. Переход вправо по тексту вообще не пойми как работает переходит через несколько символов, не могу понять в чём проблема.
Добавлю ещё, что функция стирания текста в поле, основанная на тех же функциях работает правильно, вообще не понимаю что к чему.

Ещё вопрос:можно ли как-то посмотреть какие функции выполняются и какие аргументы передаются (использую IE7)?

Последний раз редактировалось platitude, 28.05.2012 в 15:30. Причина: добавление
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2012, 17:29
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 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 в 18:00. Причина: правка
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2012, 17:59
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Ребят, кто-нибудь может подсказать, как решить последнюю проблему?
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2012, 18:09
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Может просто вызывать события нажатие клавиши влево - вправо
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2012, 18:11
Интересующийся
Отправить личное сообщение для platitude Посмотреть профиль Найти все сообщения от platitude
 
Регистрация: 27.01.2012
Сообщений: 18

Сообщение от Deff Посмотреть сообщение
Может просто вызывать события нажатие клавиши влево - вправо
можно и так, но перелазив интернет в поисках как сделать это ничего не смог найти, как это сделать?
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2012, 18:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platitude,

Изобразите на скриншоте Вашу форму и нарисуйте- раскрасьте: что и как нужно в итоге, по крайней мере я пока не понял, чего Вы добиваетесь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия клавиши KamalovRadik Javascript под браузер 3 20.02.2012 19:46
Имитация нажатия кнопки ehan jQuery 9 14.12.2011 12:07
имитация нажатия на кнопку syegorius Javascript под браузер 5 21.07.2011 13:30
Имитация нажатия клавиши Wolf Общие вопросы Javascript 10 08.01.2011 11:14
заполнения и имитация нажатия кнопки Gilman Общие вопросы Javascript 7 06.01.2009 20:28