以编程方式在文本输入中按"向左"键

Anu*_*rag 7 javascript dom-events

我试图以编程方式触发一个关键事件,在文本框中左转,但没有任何运气.

input元素具有焦点,光标位于末尾.我试图让光标向左移动一步 - 在字母"F"之前*以编程方式触发键盘事件(keydown/keyup/keypress),并使用相应的击键←或→以输入框为目标.

ABCDEF|

这是迄今为止的代码:

HTML

<input id="a" type="text" />
Run Code Online (Sandbox Code Playgroud)

使用Javascript

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

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

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

$("a").dispatchEvent(keyEvent);
Run Code Online (Sandbox Code Playgroud)

如果你想看到整个代码,请在jsfiddle上保存一个快速演示 - http://jsfiddle.net/Vsafv/

我对制作这种跨浏览器并不感兴趣(只是让它在Chrome中运行).谢谢你的帮助.

Rai*_*ine 10

e = jQuery.Event("keydown"); // define this once in global scope
e.which = 37; // Some key value
$("input").trigger(e);
Run Code Online (Sandbox Code Playgroud)

其中"输入"是您的文本区域

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
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Sea*_*sey 8

对于那些没有将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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)