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

时间:2016-04-24 02:38:22

标签: javascript 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));
        }
    });
});

似乎跳过前几个字母&#34; Thi&#34;然后将最后一个按键翻倍,你最终只能进行测试&#34;

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

干杯。

1 个答案:

答案 0 :(得分:3)

“Thi”被切断的原因是因为# ['USED', '1-series', 'BMW_1_Series', 'bmw', 'BMW', 200000081, 'USED', 100524709, 2008, '128i', '128i 2dr Convertible (3.0L 6cyl 6M)', 100994560, 'Convertible', 'convertible'] # ['USED', '1-series', 'BMW_1_Series', 'bmw', 'BMW', 200000081, 'USED', 100524709, 2008, '128i', '128i 2dr Coupe (3.0L 6cyl 6M)', 100974974, 'Coupe', 'coupe'] # ['USED', '1-series', 'BMW_1_Series', 'bmw', 'BMW', 200000081, 'USED', 100524709, 2008, '135i', '135i 2dr Coupe (3.0L 6cyl Turbo 6M)', 100974975, 'Coupe', 'coupe'] # ['USED', '1-series', 'BMW_1_Series', 'bmw', 'BMW', 200000081, 'USED', 100524709, 2008, '135i', '135i 2dr Convertible (3.0L 6cyl Turbo 6M)', 100994561, 'Convertible', 'convertible'] # ['USED', '1-series', 'BMW_1_Series', 'bmw', 'BMW', 200000081, 'USED', 100503222, 2009, '135i', '135i 2dr Coupe (3.0L 6cyl Turbo 6M)', 101082656, 'Coupe', 'coupe'] 在输入“s”之前没有集中注意力。这是因为您的病情中包含input

你得到一个双“ss”的原因是因为你从这一行e.which === 115手动获得一个“s”,但是实际按下“s”键后自动获得另一个“s”

这应该可以解决问题:

$('#search').val(String.fromCharCode(e.which))

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

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