Jquery iOS 10升级导致蓝牙扫描仪出现按键关闭事件错误
我们的商店有一个用于其web应用程序的扫描设备,我们使用jQuery keydown事件处理设备的输入。这一直运行良好,但现在所有较旧的iPhone(4、5、6)在升级时似乎在处理按键事件方面存在问题。我注意到的是+符号,然后回车键几乎同时被触发,但大多数浏览器都能正确处理这个问题 当用户点击回车键或扫描仪点击+键时,即触发处理:Jquery iOS 10升级导致蓝牙扫描仪出现按键关闭事件错误,jquery,ios,iphone,bluetooth,event-handling,Jquery,Ios,Iphone,Bluetooth,Event Handling,我们的商店有一个用于其web应用程序的扫描设备,我们使用jQuery keydown事件处理设备的输入。这一直运行良好,但现在所有较旧的iPhone(4、5、6)在升级时似乎在处理按键事件方面存在问题。我注意到的是+符号,然后回车键几乎同时被触发,但大多数浏览器都能正确处理这个问题 当用户点击回车键或扫描仪点击+键时,即触发处理: e.which = 13 || e.which = 187 当我单步执行SAFARI调试器时,jQuery选择器的值为空。当选择器的val()具有实际扫描的UPC条
e.which = 13 || e.which = 187
当我单步执行SAFARI调试器时,jQuery选择器的值为空。当选择器的val()具有实际扫描的UPC条形码时,iPhone会传递按键事件并触发热键iOS键盘。因为我们已经为focusout设置了触发处理的功能,用户可以在他/她的iPhone上点击done,将焦点放回选择器并扫描下一项
这几乎不是一个可行的解决方案,因为我们的用户需要能够在iPhone上连续扫描。有什么建议吗
以下是代码片段:
$("input[name='SCAN']").on("keydown",function(e) {
var processRegex = /^([0-9]{7,14}\+?)$/;
//on SCAN (last character is a '+/=') field - reload detail section
if (e.which == 13 || e.which == 187){
scan_val = $.trim($("[name='SCAN']").val());
if(processRegex.test(scan_val)){
Handle_Scan(scan_val); //ajax processing function
}
else
$("[name='SCAN']").val('').focus();
return false;
}
return true;
});
就好像DOM元素的值传递了regX,但keydown eventListener过早地将值传递回,就好像它没有捕捉到最后一个键捕获,可能引用了错误的内存地址。这不是一个问题,直到iOS 10升级!我想知道这个javascript引擎与以前的版本有何不同 我必须用
setTimeout(function(){//handle\u scan},250)包装整个处理逻辑
以允许事件处理程序完成捕获最后一个keydown
事件,并将控制权交还给DOM,以便调用方随后可以执行该函数
显然,这不应该发生。因此,让我感到困惑的是,javascript引擎似乎要么太快,要么事件侦听器太慢
我认为这可能与使用keydown
而不是keydup
有关,因为您可以通过按住键来连续触发事件处理程序,因为扫描仪在瞬间执行此操作,但我使用的是哪个处理程序并不重要。我使用了keydown
键,认为这样可以更快地将控制权返回给调用方,希望不需要解决方法
可能javascript引擎在事件侦听器轮询下一个硬件中断时读取该值