我很难用键盘箭头从一个元素导航到另一个元素;我希望导航仅在光标位于文本的开头或结尾时发生,即“仅在文本末尾向右移动,仅在文本开头向左移动,说我在文本末尾按左箭头我不想导航,我只是想让默认事件发生。“
这是我想要的开始, Try1
这是我需要帮助写作的功能
function isEndOrStartOfText($this)
{
return true;
// @todo calculate here
}
答案 0 :(得分:1)
你想要将这两个检查分开,因为你可以在字符串的末尾并按左键,它不应该聚焦前一个字段。
在现代浏览器中,您可以在节点上获取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();
}
}
我更新了您的示例:http://jsfiddle.net/88VL8/7/(在Chrome中测试)
PS:这段代码在IE上不起作用,stackOverflow上有一个polyfill,只搜索“如何在textarea中获取插入位置?”
答案 1 :(得分:1)
使用RGraham建议的the answer to the question,我修改了我的代码以获得the expected result
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;
}
}