Как добавить прослушиватель Javascript для захвата ввода со сканера штрих-кода Bluetooth на iPad? - PullRequest
4 голосов
/ 28 августа 2010

У меня проблемы с записью нажатий клавиш в javascript на iPad.Следующий скрипт работает на Chrome и Safari, но не на iPad Safari.Сканер штрих-кода Bluetooth отправляет 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);
  }
 });
});

Ответы [ 2 ]

5 голосов
/ 26 января 2011

Safari для iOS не запускает события клавиатуры на элементах DOM, которые не являются компонентами формы.Это включает в себя документ и тело, которые обычно используются для захвата нажатий клавиш в любом месте страницы.

Единственный способ вызвать событие нажатия клавиши в документе или теле страницы - это вызвать его во вводе или текстовой области.В этом случае событие будет правильно «пузыриться» по отношению к телу и документу.

Однако это может быть проблемой, поскольку Safari для iOS не позволяет нам фокусироваться на элементах из JavaScript.

В настоящее время мы используем решение, в котором пользователь должен нажать на поле ввода перед началом первого сканирования, а затем поле ввода перемещается за пределы экрана, но сохраняет фокус.

Если кто-то имеетлучшее решение, пожалуйста, поделитесь.

0 голосов
/ 16 января 2011

Здравствуйте, попробуйте использовать это, которые работают только с фреймворком "Prototype" 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" />
...