将光标位置设置为下一个输入的开头

时间:2013-12-09 16:14:38

标签: jquery

我正在尝试将光标的位置设置为下一个输入元素的开头。由于某种原因,它是从左侧而不是在开头设置一个字符。

我只是在用户位于输入结尾并按右箭头键时尝试这样做。

jsfiddle example

HTML

<p class="after">
    <input type="text" value="something1 this is something else" name="AnswerData0" />
    <input type="text" value="something2" name="AnswerData1" />
    <input type="text" value="something3" name="AnswerData2" />
    <input type="text" value="something4" name="AnswerData3" />
</p>

的jQuery

$(".after input[name^='AnswerData']").each(function () {
        var $this = $(this);        
        $this.attr("contenteditable", "true")
            .css({
                "border": "1px solid #000"
            });
    });

    $("input[name^='AnswerData']").keyup(function(event){
        var currentVal = $(this).val();
        $(this).attr("value", currentVal);
    });

    // handle using "right" key at the end of a span
    $("input[name^='AnswerData']").keydown(function(event){
        if (event.which == 39 && $(this).getCursorPosition() == $(this).val().length) {
            $(this).next("input[name^='AnswerData']").selectRange(0, 0);
//          alert($(this).getCursorPosition());
        }
    });

$.fn.selectRange = function(start, end) {
    if(!end){
        end = start;
    }
    return this.each(function() {
        var range;

        if (this.setSelectionRange) {
            this.focus();
            this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};

$.fn.getCursorPosition = function() {
    var el = $(this).get(0);
    var pos = 0;
    if('selectionStart' in el) {
        pos = el.selectionStart;
    } else if('selection' in document) {
        el.focus();
        var Sel = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart('character', -el.value.length);
        pos = Sel.text.length - SelLength;
    }
    return pos;
}

有谁知道为什么会这样?我在jQuery中遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试

if (event.which == 39 && $(this).getCursorPosition() == ($(this).val().length -1)) {