我在使用某项功能时遇到了一些问题。
当没有输入焦点时,我想捕获用户按键,专注于特定输入,然后将他们开始输入的所有文本传输到其中,然后将他们键入的任何内容转移到他们移除焦点在那个输入上。
我遇到的问题似乎是由于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;
有人(如果知道的话)可以解释为什么这种情况正在发生以及在哪里寻找。我寻找更多的理由而不是解决方案 - 如果我理解了问题,我可以解决问题。
干杯。
答案 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
直到事后才会获得焦点。