检测 jQuery 中的“输入内的光标位置何时更改”
Detect when "cursor position inside input change" in jQuery?
我正在使用一个名为jQuery TextRange的插件来获取光标在输入(在我的例子中是文本区域)中的位置并设置位置。
但现在我有一件事 - 我认为 - 更难解决。我想知道jQuery中是否存在一个像"光标位置改变"这样的事件。我的意思是这样的:
$('#my-input').on('cursorchanged', function(e){
// My code goes here.
)};
我想知道光标何时在输入/文本区域内移动,无论是通过箭头键还是单击鼠标都没有关系。我是jQuery新手,但我认为jQuery上不存在这样的事件,或者存在?
不,没有像"光标位置已更改"这样的事件。
但是,如果您想知道光标位置是否更改,则可以执行以下操作:用jQuery 1.7测试,我在Ie8和chrome中测试过
var last_position = 0;
$(document).ready(function () {
$("#my_input").bind("keydown click focus", function() {
console.log(cursor_changed(this));
});
});
控制台.log将在光标更改时返回。
function cursor_changed(element) {
var new_position = getCursorPosition(element);
if (new_position !== last_position) {
last_position = new_position;
return true;
}
return false;
}
function getCursorPosition(element) {
var el = $(element).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;
}
我自己需要这样的东西,所以基于@RenatoPrado解决方案,我创建了一个jQuery扩展(它在npm - jquery-position-event上)。
要使用它,您可以添加标准事件:
var textarea = $('textarea').on('position', function(e) {
console.log(e.position);
});
如果你想要初始值,你可以使用:
var textarea = $('textarea').on('position', function(e) {
console.log(e.position);
}).trigger('position');
该事件还具有有用的列和行属性。
在纯 JS 中,还记得插入符号位置,如果有缺少事件,请告诉我。
const textarea = document.querySelector('textarea')
const storeCaretPos = () =>
requestAnimationFrame(() =>
localStorage.setItem('caretPos', textarea.selectionStart),
)
textarea.oninput = textarea.onclick = textarea.oncontextmenu = storeCaretPos
textarea.onkeyup = ({ key }) => {
if (['Arrow', 'Page', 'Home', 'End'].some(type => key.startsWith(type))) {
storeCaretPos()
}
}
在 React 中,我们可以为输入标签添加一个 onSelect 事件处理程序。在JS中,它将是onSelectstart https://learn.javascript.ru/selection-range#sobytiya-pri-vydelenii。
相关文章:
- 自定义函数中的光标位置
- jQuery/Javascript>on单击将文本放置在最后一个已知的光标位置
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 如何在按键事件发生后获取文本光标的位置
- 内容可编辑分区-根据内部HTML位置的光标位置
- 保持光标位置元素在顶部使用 svg
- 保存键控触发器时保持光标位置的最佳做法
- 如何在java脚本中获取光标位置
- 获取光标位置或光标在 TinyMCE 中的行数
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 在Chrome中,光标位置异常地位于输入值的末尾
- 在光标位置的文本区域中插入一个字符串,并进行一些更改
- 如何从谷歌地图事件访问光标位置(即页面的x和y轴)
- 如何在光标所在的位置绘制线条?HTML5画布使用MrDoob's和谐
- 如何在网页加载asp.net上显示文本框中第二个字母的光标位置
- 当前光标位置(百分比)
- GWT:如何从当前光标位置或所选文本中获取css样式的属性
- 在光标位置插入HTML,并使用javascript将光标移动到插入的HTML的末尾
- jQuery:使用插件Tipsy将工具提示附加到鼠标光标位置
- 不带HTML的光标位置需要转换为带HTML的位置