在光标移动之前捕获array按下

Capture down array press before cursor is moved

本文关键字:array 按下 光标 移动      更新时间:2023-09-26

如果光标位于输入框中的某个位置,在Firefox将光标移动到框的末尾之前,是否有一些方法可以使用keyup捕获该位置?

我正在为每个输入框做一个下拉建议,我只希望在光标已经在输入框的末尾时将建议移动进去。但是,当我尝试捕获光标位置来测试这一点时,它总是返回结束,因为光标在事件处理程序开始之前移动到结束。

所以我找到了一个解决方案,但它涉及一个全局变量,这对于这样的小东西来说似乎很混乱。我声明一个变量

// global scope
var lastCursorPosition;

然后我在inputBox上有一个keydown事件处理程序

inputBox.onkeydown = function(event) { 
    if(event.keyCode === 40) { 
        lastCursorPosition = cursorPosition(inputBox); 
    }
};

最后,在keyup事件中(其中包含其他内容),我执行

inputBox.onkeyup = function(event) {
    if(event.keyCode === 40 && lastCursorPosition >= inputBox.value.length - 1) {
        // show suggestions
    }
};

如果有人有更模块化的解决方案,我很乐意听到。

BTW:如果有人好奇,我正在使用这个答案中给出的cursorPosition函数。