Javascript 检测失焦击键,聚焦输入并填入(Jquery)

Javascript 检测失焦击键,聚焦输入并填入(Jquery),javascript,jquery,Javascript,Jquery,我在一个功能上有点问题 当没有输入处于焦点时,我希望捕获用户按键,关注某个特定的输入,然后将他们开始键入的所有文本以及他们键入的任何内容转移到其中,直到他们移除对该输入的焦点 我遇到的问题似乎是由于Jquery的滞后造成的?如果您开始键入,这只是对以下JSFIDLE的一个测试 它似乎跳过了前几个字母Thi,然后将最后一个按键加倍,你最终得到的ss只是一个测试 如果知道的话,有人能解释一下为什么会发生这种情况,以及从哪里寻找答案吗。我寻找的更多的是一个原因,而不是一个解决方案——如果我理解这个问题

我在一个功能上有点问题

当没有输入处于焦点时,我希望捕获用户按键,关注某个特定的输入,然后将他们开始键入的所有文本以及他们键入的任何内容转移到其中,直到他们移除对该输入的焦点

我遇到的问题似乎是由于Jquery的滞后造成的?如果您开始键入,这只是对以下JSFIDLE的一个测试

它似乎跳过了前几个字母Thi,然后将最后一个按键加倍,你最终得到的ss只是一个测试

如果知道的话,有人能解释一下为什么会发生这种情况,以及从哪里寻找答案吗。我寻找的更多的是一个原因,而不是一个解决方案——如果我理解这个问题,我就能找到解决方案


干杯。

之所以会被切断,是因为在键入s之前,输入无法集中。这是因为在您的条件中包含了e.which===115

您获得双s的原因是,您从以下行$'search'.valString.fromCharCodee.which手动获得一个s,但也会从实际按下s键自动获得另一个s

这应该可以做到:

$(function() {
    $(document).on('keypress', function(e) {
        var tag = e.target.tagName.toLowerCase();
        if (tag != 'input' && tag != 'textarea' && tag != 'select') {
            $('#search').focus();
        }
    });
});
或者,您可以更改为keyup事件,这样自动的s就不会被键入,因为输入直到之后才会获得焦点


工作小提琴:

好的,如果输入被隐藏了,我必须先把它解开怎么办?那么,当元素被隐藏时,焦点似乎被忽略了?是否可以打开某种类型的计时器,缓存用户击键,直到元素具有焦点,然后复制缓存,并允许从那时起追加击键?@Trent在按键、取消隐藏和焦点之间是否有任何故意延迟?我不确定我是否理解计时器的必要性。@Trent为什么不直接使用。在集中注意力之前在按键上显示:你的答案会让我走上正确的道路。我试图抽象这个问题,但我试图整理的代码似乎使用了VelocityJS,按键激活了一个div的滑入,只有在滑入完成后,输入才会获得焦点。因此,如果您开始键入,它会一直激活显示,并产生一些可怕的DOM问题:
$(function() {
    $(document).on('keypress', function(e) {
        var tag = e.target.tagName.toLowerCase();
        if (tag != 'input' && tag != 'textarea' && tag != 'select') {
            $('#search').focus();
        }
    });
});