如何添加 Javascript 侦听器以捕获从蓝牙条码扫描器到 iPad 的输入?

Posted

技术标签:

【中文标题】如何添加 Javascript 侦听器以捕获从蓝牙条码扫描器到 iPad 的输入?【英文标题】:How can I add a Javascript listener to capture input from bluetooth barcode scanner to iPad? 【发布时间】:2010-08-28 00:21:13 【问题描述】:

我在 iPad 上的 javascript 中记录击键时遇到问题。以下脚本适用于 Chrome 和 Safari,但不适用于 iPad Safari。蓝牙条码扫描器发送 12 位数字作为击键,然后发送返回字符。有人有什么想法吗?

我想你需要一台 iPad 来试试这个 :)

谢谢, 标记

$(document).ready(function()
 $(document).keypress(function(e)
  if( e.keyCode == 13)
   alert($('#barcode').attr('value'));
   $('#barcode').attr('value','');
  
  else
   var key = String.fromCharCode(e.which);
   var new_val = $('#barcode').attr('value') + key;
   $('#barcode').attr('value',new_val);
  
 );
);

【问题讨论】:

iPad 上的 Safari 可能会将这些解析为除击键之外的其他内容。我会提供更多信息,但我不拥有任何以 i 开头的东西。 您收到的是什么而不是您的 12 位数字后跟一个控制字符? 某些扫描仪具有您可以运行的内部配置系统。这些配置设置之一是它们是否在每次扫描后自动发送return 【参考方案1】:

ios 版 Safari 不会在不是表单组件的 DOM 元素上触发键盘事件。这包括通常用于捕获页面任何位置的击键的文档和正文。

在文档或页面正文上触发击键事件的唯一方法是在输入或文本区域中触发它。在这种情况下,事件将正确地“冒泡”到正文和文档。

但是,这可能是个问题,因为 iOS 版 Safari 不允许我们从 javascript 中获得元素焦点。

目前,我们正在使用一种解决方案,即用户必须在开始第一次扫描之前单击输入字段,然后输入字段会移出屏幕但仍保持焦点。

如果有人有更好的解决方案,请分享。

【讨论】:

您可以将 web 应用程序包装在 phonegap 中并使用此方法:***.com/a/16900931/789960【参考方案2】:

您好,请尝试使用仅适用于“原型”javascript 框架的这个。 此脚本仅适用于 EAN13 或 EAN8,但如果您想使用 12 位数字,只需更改“if(result.lenght == 13)”即可。

<script language="javascript" type="text/javascript">

    Event.observe(window, 'load', function()
        Event.observe(document, 'keyup', myEventHandler);
    );

    var timeout = 0;

    function myEventHandler(e)
    
        if(e.keyCode == 13)
        
            var result = $('test').value;
            $('test').value = '';

            if(result.length == 13 || result.length == 8)
            
                var d = new Date();
                var interval = d.getTime() - timeout;
                timeout = 0;

                if(interval <= 1000)
                
                    alert(result);
                
            
        
        else if(e.keyCode >= 48 && e.keyCode <= 57)
        
            if(timeout == 0)
            
                var d = new Date();
                timeout = d.getTime();
            

            var key = String.fromCharCode(e.which);
            var new_val = $('test').value + key;
            $('test').value = new_val;
        
    
</script>
<input type="hidden" id="test" />

【讨论】:

此方法根本不起作用... iOS 上的表单字段必须具有焦点才能捕获任何击键(keyup、keydown、keypress 等)。不可能将焦点放在 type="hidden" 或 style="display:none" 的任何表单元素上。

以上是关于如何添加 Javascript 侦听器以捕获从蓝牙条码扫描器到 iPad 的输入?的主要内容,如果未能解决你的问题,请参考以下文章

从 Guzzle 中捕获异常

如何将事件侦听器添加到动态创建的复选框并检查是不是选中了复选框。 JavaScript

如何将JavaScript侦听器添加到PrimeFaces Ajax事件

如何在 javascript 中为所有事件添加事件侦听器而不单独列出它们?

如何捕获 System.exit 事件?

添加事件监听器的最佳实践(javascript、html)