在文本的开头或结尾处使用键盘箭头导航到下一个文本元素

时间:2014-01-31 14:03:29

标签: javascript jquery html

我很难用键盘箭头从一个元素导航到另一个元素;我希望导航仅在光标位于文本的开头或结尾时发生,即“仅在文本末尾向右移动,仅在文本开头向左移动,说我在文本末尾按左箭头我不想导航,我只是想让默认事件发生。“

这是我想要的开始, Try1

这是我需要帮助写作的功能

function isEndOrStartOfText($this)
{
    return true;
    // @todo calculate here
}  

2 个答案:

答案 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;
   }
}