当按下向上箭头键时,将文本光标发送到文本框焦点的末尾。

3

目前,在文本框中按上箭头键时,光标会跳到文本的开头。我想覆盖这个功能,使得当按下上箭头键时,光标移动到文本的末尾。

这是我的代码:

$("#searchBox").bind("keydown", function (e) {
    if (e.which === 38) {
            searchBox.focus();
            $current.removeClass("searchBoxResultItem-active");
            searchBox.value = searchUserInput;
            searchBox.setSelectionRange(searchBox.length, searchBox.length);
        }
});
我被告知上述文本可以起作用,但我猜测由于箭头键已经设置为将代码移到开头,所以它没有起作用。如何覆盖此功能?

为什么要以不同的方式映射键值?顺便说一句,e.preventDefault();可能会实现你想要的效果。 - Daemedeor
同时$current在作用域中未定义,所以我不确定那是否会起作用..... - Daemedeor
@Daemedeor我有一个无序列表,我希望用户能够使用箭头键浏览它,而不会影响文本框焦点位置。$ current只是我在其他地方使用的一个变量。 - Katie
@Katie - 你为什么删除了你的木材算法问题?我花了一个小时写答案给那个问题,你就这样删除了我的工作。这不太好。 - Steven Moseley
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

你的代码中存在 undefined 的变量。为了简化代码,这是一个可工作的版本:

$("#searchBox").on("keydown", function (e) {
    if (e.which === 38) {
        e.preventDefault();
        searchBox.setSelectionRange(searchBox.value.length, searchBox.value.length);
    }
});

查看JSFiddle演示


1
不确定为什么你被踩了,但是那两行代码确实起作用了。谢谢。 - Katie

0
strLength 乘以 2,以确保光标始终位于末尾,因为有时 Opera 会将回车视为 2 个字符。
$("#searchBox").bind("keydown", function (e) {
    if (e.which === 38) {
           e.preventDefault();
           $current.removeClass("searchBoxResultItem-active");

           // Multiply by 2 to ensure the cursor always ends up at the end;
           // Opera sometimes sees a carriage return as 2 characters.
           var strLength = $(this).val().length * 2;
           this.setSelectionRange(strLength, strLength);
        }
});

查看 JSFiddle 演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,