如何在输入文本字段中移动光标

时间:2014-06-24 14:59:16

标签: javascript jquery angularjs

我正试图在我的一个测试中模拟光标在左箭头键输入文本字段中的移动方式,但似乎该事件不起作用(可能出于安全原因?)。有没有人知道解决方法?

这是一个带有示例的jsFiddle:http://jsfiddle.net/UYW6M/

$(function () {
    $('#check').click(function(e) {
        e.preventDefault();
        $('input').focus();
        console.log($('input')[0].selectionStart);
    });
    $('#move').click(function(e) {
        e.preventDefault();

        var press = jQuery.Event("keypress");
        press.ctrlKey = false;
        press.which = 37;
        $('input').focus();
        setTimeout(function(){
             $('input').trigger(press);  
             console.log('event triggered!');
        }, 1000);
    });
});

键37是左箭头。也不能与其他代码一起使用(例如65用于插入“a”)。

我在这里使用jQuery是为了简单,但我的应用程序实际上是在Angular + Karma中,以防有人知道该组合的解决方案。

1 个答案:

答案 0 :(得分:1)

我认为这是安全的事情。但你为什么需要呢?如果您只想更改光标位置,那么您甚至不需要jquery。 纯javascript:

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();
        }
    }
}

更多信息:Set keyboard caret position in html textbox