19

かなり検索しましたが、満足のいく解決策が見つからないようです。誰かが助けてくれることを願っています。

私は jQuery を使用していますが、何千行もの Javascript も作成しています。したがって、「純粋な」JavaScript ソリューションで問題ありません。

マウスアップイベントでコントロールキーが物理的に押されているかどうかを判断しようとしています。それでおしまい; 他に前提条件はありません。クロスブラウザでこれを確実に行う方法を知っている人はいますか?

キーが押されて離されたときに注意して、これを状態変数に保存しようとしました:

// 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);
}

どんな助けでも大歓迎です。

4

1 に答える 1

35

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

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

ここで実行例を確認してください。

于 2009-07-31T03:49:35.027 に答える