繁体   English   中英

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

[英]Detect out of focus keystroke, focus an input and fill it in (Jquery)

我在使用某项功能时遇到了一些问题。

当没有输入焦点时,我想捕获用户按键,专注于特定输入,然后将他们开始输入的所有文本传输到其中,然后将他们键入的任何内容转移到他们键入该输入。

我遇到的问题似乎是由于Jquery的滞后? 如果你开始在下面的JSFiddle中键入“这只是一个测试”

https://jsfiddle.net/bjgngayq/1/

HTML: <input type="text" id="search" />

JS:
$(function() {
    $(document).on('keypress', function(e) {
        var tag = e.target.tagName.toLowerCase();
        if (e.which === 115 && tag != 'input' && tag != 'textarea' && tag != 'select') {
            $('#search').focus();
            $('#search').val(String.fromCharCode(e.which));
        }
    });
});

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

有人(如果知道的话)可以解释为什么会发生这种情况以及在哪里看。 我正在寻找更多的理由而不是解决方案 - 如果我理解这个问题,我可以找出解决方案。

干杯。

“Thi”被切断的原因是因为在input “s”之前input没有被集中。 这是因为在您的情况下包含e.which === 115

你得到一个双“ss”的原因是因为你从这行$('#search').val(String.fromCharCode(e.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”不会被输入,因为input直到之后才会获得焦点。

工作小提琴: https//jsfiddle.net/bjgngayq/3/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM