4

我在 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);
  }
 });
});
4

2 回答 2

5

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

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

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

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

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

于 2011-01-26T12:33:13.713 回答
-1

您好尝试使用仅适用于“原型”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" />
于 2011-01-16T20:38:00.350 回答