我正在尝试在文本区域中获取插入符号的位置。我使用了很多不同的方法,大多数都涉及获取范围或获取元素的 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