2011-01-04 35 views
5

私はJavascriptでイベントリスナーを持っていますが、キーイベントがCtrl (e.keyCode == 17)であるかどうかを知ることができますが、このCtrlが正しいものか左のものかをどのように知ることができますか?イベントが右のCtrlキーから来るかどうかを確認する方法はありますか?

+2

にブラウザのサポートを確認することができます参照してください。ごめんなさい。あなたの痛みが分かります。 – zzzzBov

答えて

3

私はkeyCodeが違うとは思わない。

e.ctrlKeyを使用すると、コントロールキーが押されたかどうかをより正確に判断できます。

フラッシュcan not tell which one is pressedのいずれか(そのか間違っているかのいずれか)のようです。

+0

抽象化されています。例えば。私は自分のUbuntuキーボード設定で、それぞれに異なるオプションを選択することができます。 –

+0

低レベルで2つを区別するソフトウェアを確実に書くことができるため、ハードウェアレベルで抽象化することはできません。しかし、おそらくOSレベルで抽象化されています。 –

+0

MSIEは、左右のCtrlキーを区別することができます。その点について私の答えを見てください。役に立つ情報は –

6

ちょっとした注意:適切なコントロールキーが利用できるかどうかはアーキテクチャ/デザインに基づいていません。多くのノートパソコンのキーボードには2つのコントロールキーがない場合があります。

+1

+1です。 – alex

1

MSIEはほとんどのイベントでctrlLeftプロパティを提供します。プロパティの値は次のとおりです。

  • true左キーが押されなかった場合、左キーがイベント
  • false中に押された場合。

あなたは右Ctrlキーが押されたかどうかを判断するためにevent.ctrlKeyevent.ctrlLeftを組み合わせることができます。

if (event.ctrlKey) { 
    if (event.ctrlLeft) { 
     // left Ctrl key pressed 
    } else { 
     // right Ctrl key pressed 
    } 
} else { 
    // no Ctrl key pressed 
} 

注Ctrlキーはもう押されていないので、keyupctrlLeftプロパティが定義されていないこと。

MSIE7およびMSIE9でテストしました。 Firefoxでは動作しません。

詳細はhttp://help.dottoro.com/ljqlvhuf.phpを参照してください。

+0

残念なことに、それはIEだけの場合はあまり役に立ちません。 – alex

1

あなたはそれをトレースした場合は、同じキーが両方のために使用されている(17)を見つけるだろう..私はこれを頼まれたとき、それが利用可能であった場合、私は知らない、

1

を区別することは不可能であると思いますが、あなたと同様にaltとshiftを区別することができます。これで、KeyboardEvent.DOM_KEY_LOCATION_ *プロパティを使用してこの区別を行うことができます。

Can javascript tell the difference between left and right shift key?

は注意してくださいしかし、私は、Chromeはその実装に欠陥を持っているように見えることを発見しました。 How can I distinguish left- and right- shift, ctrl, and alt keys onkeyup in Chrome with Javascript

1

それは右の1 2のため1になります左Ctrlキーのevent.locationプロパティがありますが、あなたはあなたがすることはできませんcanIuse

if (e.which == 17) { 
    if (event.location == 1) { 
     // left ctrl key 
    } else if (event.location == 2) { 
     // right ctrl key 
    } 
} 
関連する問題