2012-01-20 9 views
23

私は、ディスパッチされたイベントオブジェクトにkeyCodeを設定しようとしています。ChromeのKeyboardEvent、keyCodeは0です

ボタンをクリックすると、テキストボックスコントロール上でイベントがシミュレートされたキーダウンイベントに表示されます。イベントは正常に発生しましたが、keyCodeは0です。正しいkeyCodeでイベントオブジェクトをテキストボックスに送信する必要があります。 私はhereのコードを使用しています。

ディスパッチイベントでkeyCode値を設定するにはどうすればよいですか?

<html> 
    <head>  
    </head> 
    <body> 
     <input type="button" id="btn" value="Click"></input> 
     <input type="text" id="txt"></input> 
     <script> 
      document.getElementById('btn').addEventListener("click", btnClick); 
      document.getElementById('txt').addEventListener("keydown", txtKeydown);   

      function btnClick(e) { 
       var txt = document.getElementById('txt');    

       var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) { 
        var e = document.createEvent("KeyboardEvents"); 
        e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1)); 
        e.keyCode = 83; 
        e.charCode = 0; 
        target.dispatchEvent(e); 
       }; 

       var canceled = !dispatchKeyboardEvent(txt, 
       'keydown', true, true, // type, bubbles, cancelable 
       window, // window 
       's', // key 
       0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick 
       false, false, false); // Ctr, Alt, Shift 
      } 

      function txtKeydown(e) { 
       console.dir(e); 
       console.log(e.keyCode); 
      } 

     </script> 
    </body> 
</html> 
+0

これには非常に巧妙な回避策があります。http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key/10520017#10520017必要なプロパティを設定し、キーアップ/ダウンイベントを送信することができます。サンプルコードが含まれています。 – Orwellophile

答えて

9

これはあなたの質問に対する回答を既に見つけている可能性がありますので、少し尋ねられたようです。あなたが持っていない場合には、this SO questionに指摘されているように、bug in Webkitがあります。これは、keyCodeを常に0にします。明らかに、修正するまではあまりできません。残念ながら、それは本当に誰もがそれに取り組んでいるように見えません。あなたが聞きたい答えではありませんが、誰でもこの権利のためにあなたに与える唯一の答えです。

34

このバグは長年にわたってそこに座っていたことに驚いています。一般的なイベントを使用する回避策があるようです。デモ:http://jsbin.com/awenaq/3

+9

このバグはまだ存在します! –

+0

@Philipデモを説明できますか?押されたボタンのキーコードを入力したようですが、これはクロムがどのキーが押されたかを知ることができないための回避策ではありません。 – ProblemsOfSumit

+0

@Sumit:**手動で**イベントをトリガするときにKeyboardEventの代わりに汎用イベントを使用する方法をデモで示します。 –

0

私は、Sony XperiaやHTC DevicesなどのAndroidデバイスで同じ問題が発生しています。だから私は別の解決策を見つけた:あなたは...名前は明日になります「、この機能は禁じられ、淘汰廃止予定されている...それはバグではありません、この質問 KeyCode Returns 0 Always

0

のために私の答えをwhatevaを参照してください。長い間働くためにこの機能に頼ることはできません。 ...そして、広く開かれたセキュリティリスク...あなたがやろうとしていることをやるための別の方法を見つける。 MOZILLAの仕様を参照すると、これを避けるために疫病のように警告するBIG BED RED BANNERが表示されます。 彼らは効果的にあなたが持っている場合、それは常にjQueryの0

0

にキーコードをザップ一箇所を除いて、コードを変更せずに出血を止める0を返すことによって、それを修正しません。

$.Event(event, { keyCode: 13 });

これが意図された使用です。
Source

関連する問題