Программно нажмите клавишу «Влево» для ввода текста - PullRequest
7 голосов
/ 14 мая 2010

Я пытаюсь программно запустить ключевое событие, чтобы перейти влево в текстовом поле, но безуспешно.

Элемент ввода имеет фокус, а курсор находится в конце. Я пытаюсь заставить курсор перемещаться влево на один шаг - перед буквой «F» * программным путем, вызывая событие Keyboard (keydown / keyup / keypress) с соответствующим нажатием клавиши ← или →, нацеленным на поле ввода.

ABCDEF |

Вот код на данный момент:

HTML

<input id="a" type="text" />

Javascript

var keyEvent = document.createEvent("KeyboardEvent");

var keyLocation = '0x00';
var keyIdentifier = "Left";

keyEvent.initKeyboardEvent("keypress",
                        true,
                        true,
                        window,
                        keyIdentifier,
                        keyLocation,
                        false);

$("a").dispatchEvent(keyEvent);

Сохранено быстрое демо на jsfiddle, если вы хотите увидеть весь код - http://jsfiddle.net/Vsafv/

Я не заинтересован в создании этого кросс-браузера (просто запустите его в Chrome). Спасибо за любую помощь.

Ответы [ 4 ]

10 голосов
/ 28 мая 2010
e = jQuery.Event("keydown"); // define this once in global scope
e.which = 37; // Some key value
$("input").trigger(e);

, где "input" - это ваша текстовая область

37 - слева
38 - вверх
39 - справа
40 - вниз

Поэтому, когда вы записываете свои «события», вы записываете значения для нажатых клавиш.
Я уверен, что вы уже нашли способ сделать это, но на всякий случай, вот идея, как бы я занялся этим:

var keysPressed = new Array(); // somewhere in the global scope
$("input").keydown(function (e) {
    keysPressed.push(e.which); //adding values to the end of array
});

Надеюсь, это поможет

8 голосов
/ 14 мая 2010

А для тех, кто не рассматривает jQuery как решение для всего:)

С http://blog.josh420.com/archives/2007/10/setting-cursor-position-in-a-textbox-or-textarea-with-javascript.aspx

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();
        }
    }
}
1 голос
/ 31 мая 2010

Насколько я вижу, вы можете сделать:

var pos = document.getElementById("a").length; 
document.getElementById("a").setSelectionRange(pos-1, pos-1);
1 голос
/ 14 мая 2010

Вы можете взглянуть на этот вопрос StackOverflow -> jQuery Установить положение курсора в текстовой области

...