This is a symptom of an underlying bug in Safari (iOS 8 only). I first encountered this problem when using a bluetooth barcode scanner in HID mode. Using the Notes app, I can scan very fast, with no characters skipped/truncated. In Safari, in the most simple web form, with a single input text field or textarea, the character skipping/truncating is intermittent. This is not specific to barcode scanners. You can reproduce the same issue with any bluetooth keyboard, if you can type fast enough but accurately so you know that it's skipping/truncating. If someone thinks I'm overlooking something, please chime in!
My findings:
- I just installed iOS 8.2 beta on my iPad Air and the issue is still there.
- This only occurs with bluetooth keyboards paired in HID mode.
- I tracked the keyboard events while scanning and here's what I found. The textinput event fires for the first few characters but not for the rest. So I tried to scan this text: LOT00002. But the "T" and "2" were omitted because the TEXTINPUT event didn't fire after the keypress event. See bold and orange lines...
keydown keyCode=76 (L) which=76 (L) charCode=0
keypress keyCode=76 (L) which=76 (L) charCode=76 (L)
textInput data=L
keyup keyCode=0 which=0 charCode=0
keydown keyCode=79 (O) which=79 (O) charCode=0
keypress keyCode=79 (O) which=79 (O) charCode=79 (O)
keyup keyCode=0 which=0 charCode=0
textInput data=O
keydown keyCode=84 (T) which=84 (T) charCode=0
keypress keyCode=84 (T) which=84 (T) charCode=84 (T)
keyup keyCode=0 which=0 charCode=0
[MISSING textInput event]
keydown keyCode=48 (0) which=48 (0) charCode=0
keypress keyCode=48 (0) which=48 (0) charCode=48 (0)
textInput data=0
keyup keyCode=0 which=0 charCode=0
keydown keyCode=48 (0) which=48 (0) charCode=0
keypress keyCode=48 (0) which=48 (0) charCode=48 (0)
keyup keyCode=0 which=0 charCode=0
textInput data=0
keydown keyCode=48 (0) which=48 (0) charCode=0
keypress keyCode=48 (0) which=48 (0) charCode=48 (0)
textInput data=0
keyup keyCode=0 which=0 charCode=0
keydown keyCode=48 (0) which=48 (0) charCode=0
keypress keyCode=48 (0) which=48 (0) charCode=48 (0)
textInput data=0
keyup keyCode=0 which=0 charCode=0
keydown keyCode=50 (2) which=50 (2) charCode=0
keypress keyCode=50 (2) which=50 (2) charCode=50 (2)
keyup keyCode=0 which=0 charCode=0
[MISSING textInput event]
keydown keyCode=13 which=13 charCode=0
keypress keyCode=13 which=13 charCode=13
keyup keyCode=0 which=0 charCode=0