2009-07-31 3 views
16

私はかなりの検索をしましたが、満足できる解決策を見つけることができませんでした。私は誰かが助けることを望む。Javascriptコントロールコントロールキーがマウスアップ時に表示される

私はjQueryを使っていますが、何千ものJavascriptも書いています。だから "純粋な" javascriptの解決策はちょうど良いです。

mouseupイベントでコントロールキーが物理的に押されているかどうかを確認しようとしています。それでおしまい;他の前提条件はありません。誰もが信頼性の高い、クロスブラウザを行う方法を知っていますか?

私はキーが押されて離されたときに注目することにより、状態変数でこれを保存しようとしました:

// BEGIN store control key status in hash_state 
$().bind('keydown','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = true; 
    console.debug(hash_state.sw_ctrldn); 
}); 
$().bind('keyup','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = false; 
    console.debug(hash_state.sw_ctrldn); 
}); 
// END store control key status in hash_state 

しかし、これは実際に動作しません。あなたがfirebugを使ってこれをテストしてコンソールを見ると、自動リピートが起こっているように見え、その値はトグルします。

私は有益な何かがそこにあるかどうかを確認するためのmouseupイベントを視察したが、無駄に:

var debugEvent = function(arg_obj_e){ 
    var str = ''; 
    for (var attr in arg_obj_e){ 
    str += attr + ': ' + arg_obj_e[attr] + '\n'; 
    } 
    console.debug(str); 
} 

任意の助けいただければ幸いです。

+0

うわー、私はjQueryがキーイベントをサポートしているかどうかはわかりませんでした。私はそれのドキュメントを見つけることができません。また、$()。bind()(空のjQuery)が動作するのでしょうか、それとも単に省略形ですか?もしそうなら、$(文書)にバインドされていますか? – eyelidlessness

+0

@eyelidlessness:その種のバインディングは、js-hotkeysという名前のプラグインからのものです。 – CMS

答えて

32

event.ctrlKeyプロパティを使用できます。

$(function(){ 
    $('#elementId').mouseup(function(e){ 
    var isCtrlPressed = e.ctrlKey; 
    // true or false whether ctrl is pressed or not 
    }); 
}); 

実行中の例を確認してください。here

+0

うわー、私はイベントのデバッグ中にそのプロパティを探していました。それ。ありがとうございました! FF3の魅力のように動作します。今IEについて見てみましょう。 –

+0

psデモをありがとう、非常に感謝します。 –

+0

2000年後半に* DOM Level 2 *標準(http://is.gd/1Vryp)に導入されたこれらのキー変更子(shiftKey、ctrlKey、altKey)は、Michaelのサポートを受けています。 – CMS

関連する問題