HTML designMode, перемещайте курсор программно, используя стандартные обработчики нажатий клавиш - PullRequest
0 голосов
/ 30 июля 2010

Хотя я уже получил ответ, я начну небольшую награду за этот.Поскольку ответ заключается в том, что это невозможно, я ищу альтернативное решение или какое-то другое предложение.

Я создаю очень настраиваемый редактор с использованием HTML designMode.В одной ситуации я хочу, чтобы действие по умолчанию нажатия клавиши выполнялось дважды при однократном нажатии фактической клавиши.В данном случае речь идет о клавише DOWN (код 40).При нажатии этого я хочу пропустить одну строку, поместив курсор (|) на следующую.Например:

First li|ne
Second line
The third line

После нажатия клавиши со стрелкой вниз:

First line
Second line
The third| line

Я попытался настроить события нажатия клавиш программно, вызвав их с помощью JavaScript, но при этом не произошло перемещениекурсор.Есть идеи как это сделать?

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Вы не сможете сделать это разумным способом.Единственный способ программного перемещения каретки в браузерах, отличных от IE, - использование объекта браузера Selection, который не имеет механизма для эмуляции нажатия клавиши со стрелкой вниз.

0 голосов
/ 30 июля 2010

Вы можете сделать это с помощью комбинации нескольких методов.Первой была бы функция для перемещения курсора в произвольную позицию в текстовой области:

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}

Приведенный выше код взят из этого сообщения в блоге , которое мне пришлось использовать в Googleкеш для просмотра.Затем вам нужно будет найти текущую позицию курсора в текстовой области .

Наконец, используя текущую позицию курсора, вы можете получить indexOf (), который каретка возвращает относительно вашего курсора.поместите и используйте его, чтобы переместить курсор вниз на 2 строки.

Довольно не так, но он должен работать.

...