Javascript 在文本开始或结束时,使用键盘箭头导航到下一个文本元素
我很难使用键盘箭头从一个元素导航到另一个元素;我希望仅当光标位于文本的开头或结尾时才进行导航,即“仅当光标位于文本的结尾时才向右移动,仅当光标位于文本的开头时才向左移动,例如,当光标位于不希望导航的文本的结尾时,我按下向左箭头,我只想让默认事件发生。” 这是我想要的开始, 这是我需要帮助编写的函数Javascript 在文本开始或结束时,使用键盘箭头导航到下一个文本元素,javascript,jquery,html,Javascript,Jquery,Html,我很难使用键盘箭头从一个元素导航到另一个元素;我希望仅当光标位于文本的开头或结尾时才进行导航,即“仅当光标位于文本的结尾时才向右移动,仅当光标位于文本的开头时才向左移动,例如,当光标位于不希望导航的文本的结尾时,我按下向左箭头,我只想让默认事件发生。” 这是我想要的开始, 这是我需要帮助编写的函数 function isEndOrStartOfText($this) { return true; // @todo calculate here } 您希望分隔这两个检查,因
function isEndOrStartOfText($this)
{
return true;
// @todo calculate here
}
您希望分隔这两个检查,因为您可以位于字符串的末尾并按left键,它不应该聚焦上一个字段 在现代浏览器中,您可以在节点上获取node.selectionStart,然后按左键检查选择开始是否为0:
if ($this[0].selectionStart === 0) {
e.preventDefault();
if ($('#'+previous_id).length > 0) {
$('#'+previous_id).focus();
}
}
对于右键,您可以执行以下检查:
if ($this[0].selectionStart === $this.val().length) {
e.preventDefault();
if ($('#'+next_id).length > 0) {
$('#'+next_id).focus();
}
}
我更新了您的示例:(在Chrome中测试)
PS:此代码在IE上不起作用,stackOverflow上有一个polyfill可用,只需搜索“如何在textarea中获得插入符号位置?”使用RGraham建议的方法,我对代码进行了一些修改,以获得
此答案包含有关如何在文本字段中获取当前光标位置的信息-
function getCursorPosition(jqueryItem) {
var input = jqueryItem.get(0);
if (!input) return; // No (input) element found
if ('selectionStart' in input) {
// Standard-compliant browsers
return input.selectionStart;
} else if (document.selection) {
// IE
input.focus();
var sel = document.selection.createRange();
var selLen = document.selection.createRange().text.length;
sel.moveStart('character', -input.value.length);
$("#sel").html(sel);
$("#selLen").html(selLen);
return sel.text.length - selLen;
}
}