У меня возникли проблемы с регистрацией нажатий клавиш в 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); } }); });
Safari для iOS не вызывает события клавиатуры на элементах DOM, которые не являются компонентами формы. Это включает документ и тело, которые обычно используются для захвата нажатий клавиш в любом месте страницы.
Единственный способ вызвать событие нажатия клавиши на документе или теле страницы – вызвать его во входном или текстовом поле. В этом случае событие будет правильно «пузыриться» с телом и документом.
Однако это может быть проблемой, потому что Safari для iOS не позволяет нам выделять элемент из javascript.
На данный момент мы используем решение, в котором пользователю нужно щелкнуть по полю ввода перед началом первого сканирования, а поле ввода затем перемещается за пределы экрана, но сохраняет фокус.
Если у кого-то есть лучшее решение, пожалуйста, поделитесь.
Здравствуйте, попробуйте использовать это, которые работают только с фреймворком JavaScript «Prototype». Этот скрипт работает только с 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" />