1

我正在尝试在文本区域中获取插入符号的位置。我使用了很多不同的方法,大多数都涉及获取范围或获取元素的 selectionStart。出于某种原因,虽然它有点工作,但每当我仍在输入新字符并且还没有插入任何字符时,它返回的值比它应该的少一个。

例如:给定以下输入,插入符号为 |:

|      : 0
a|     : 1
ab|    : 1 <- weird!
abc|   : 2 <- still weird
ab|    : 2 <- back to normal
abc|   : 2 <- back to weird
ad|bc  : 2 <- normal 
adbce| : 5 <- now normal

我想我不确定它什么时候会发生——如果你输入了一些字符但没有插入到字符串的中间,它似乎会少一个,之后它又开始工作了。

为什么第二个字符不添加到插入符号位置?有其他人发现这个吗?

编辑:它在“输入”事件上运行:

// use a solution from stack that works with jquery:
(function ($, undefined) {
    $.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);

$(window).load(function(){
    // when editing the query box
    $("#query_textarea").bind('input', function(){
         window.status=$("#query_textarea").getCaretPosition();
         // do some other stuff
    }
}

我在 Mac 上运行 Chrome

4

2 回答 2

0

在为具有较旧的基于 webkit 的浏览器的嵌入式设备进行开发时,我遇到了同样的问题。这是调度事件和更新控件的时间问题。在事件处理程序中,我检查了字段值的长度和插入符号的位置,在输入字段时它们并不相同。据我所知,该问题已在 2013 年中期在 webkit 中修复。参考:https ://bugs.webkit.org/show_bug.cgi?id=110742

Edge、最近的 Safari、Firefox、Chrome 都按预期工作。

于 2016-04-11T11:06:53.193 回答
-1

这回答了你的问题了吗?

纯JS: https ://stackoverflow.com/a/1891501/671373

jQuery: https ://stackoverflow.com/a/1909997/671373

否则,您可能会检查“jQuery - fieldSelection”
https://github.com/localhost/jquery-fieldselection
从它的描述中:“一个 jQuery 插件来获取'n'set the caret/selection。”

于 2013-07-03T21:45:53.420 回答