Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery iOS 10升级导致蓝牙扫描仪出现按键关闭事件错误_Jquery_Ios_Iphone_Bluetooth_Event Handling - Fatal编程技术网

Jquery iOS 10升级导致蓝牙扫描仪出现按键关闭事件错误

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条

我们的商店有一个用于其web应用程序的扫描设备,我们使用jQuery keydown事件处理设备的输入。这一直运行良好,但现在所有较旧的iPhone(4、5、6)在升级时似乎在处理按键事件方面存在问题。我注意到的是+符号,然后回车键几乎同时被触发,但大多数浏览器都能正确处理这个问题

当用户点击回车键或扫描仪点击+键时,即触发处理:

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引擎在事件侦听器轮询下一个硬件中断时读取该值