2016-10-12 7 views
1

jQuery keydownイベントを使用してデバイスの入力を処理するWebアプリケーションのスキャナデバイスがあります。これは、すべての古いiPhone(4,5,6)がアップグレード時にkeydownイベントを処理することに問題があるように見えることを除いて、うまくいきました。私が気づいたのは+記号で、その後ほとんどのブラウザがこれを正しく処理しますが、ほとんどのブラウザがこれを正しく処理します...iOS 10のアップグレードによりブルートゥーススキャナでkeydownイベントエラーが発生する

ユーザがEnterキーを押すかスキャナが+キーを押すとトリガーされます。

e.which = 13 || e.which = 187 

SAFARIデバッガを実行すると、jQueryセレクタの値が空になります。セレクタのval()に実際にスキャンされたUPCバーコードがあると、iPhoneはキーダウンイベントを渡し、ホットキーiOSキーボードがトリガされます。処理をトリガするためにフォーカスアウトを設定しているので、ユーザは自分のiPhoneでヒットし、セレクタにフォーカスを戻して次の項目をスキャンすることができます。

私たちのユーザーがiPhoneで連続してスキャンできる必要があるため、これは実行可能なソリューションではありません。助言がありますか? DOM要素の値がREGXを渡すかのように

$("input[name='SCAN']").on("keydown",function(e) { 
     var processRegex = /^([0-9]{7,14}\+?)$/; 
     //on SCAN (last character is a '+/=') field - reload detail section 
     if (e.which == 13 || e.which == 187){ 
       scan_val = $.trim($("[name='SCAN']").val()); 
       if(processRegex.test(scan_val)){    
        Handle_Scan(scan_val); //ajax processing function   
       } 
       else 
        $("[name='SCAN']").val('').focus(); 

      return false; 
     } 

      return true; 
    }); 

答えて

1

そのけど、それは最後のキーに追いついていないかのようにKeyDownイベントのEventListenerが戻って途中で値を渡します。ここでは

は、コードのスニペットです誤ったメモリアドレスへの参照を取得する可能性があります。これは、iOS 10のアップグレードまでは問題ではありませんでした。私はこのjavascriptエンジンが以前のバージョンとどう違うのだろうか?

イベントハンドラが最後の​​イベントのキャプチャを終了し、DOMに制御を戻して呼び出し元がその関数を実行できるようにするには、処理ロジック全体をsetTimeout(function(){ //handle_scan},250);でラップする必要がありました。

これは明らかに起こりません。だから私にとってとても混乱しているのは、javascriptエンジンが速すぎるか、イベントリスナーが遅すぎるように思えることです。

keyupの代わりに​​を使用することと関連があると思っていました。これは、スキャナが分割されたミリ秒でこの処理を実行するため、キーを押したままイベントハンドラを連続的に起動できます。 。私は​​と考えていましたが、回避策を必要としないことをより早く期待して、呼び出し元に制御を戻すことが早くなりました。

イベントリスナーが次のハードウェア割り込みのためにポーリングしている間に、JavaScriptエンジンが値を読み取ることはありますか?

関連する問題