2011-10-27 4 views
0

サードパーティのコントロール(Aspose.Cells.GridWeb)を使用しています。それは基本的にWebベースのExcelコントロールです。ユーザーがセルを選択すると、コントロールによってonCellSelectedイベントが発生します。JQueryのキーダウンイベントはいつスローされますか?

問題は、このイベントを発生させるためにどのキーが押されたのかを知る必要があります。私はこの情報をイベントの処理方法を決定するために必要とします。

私はクリックしたボタンをキャプチャするためにJQueryのkeydownイベントを使用しています。

$(document).keydown(function(event) { 
     isKeyLastClicked = true; 
     keyLastClickedId = event.which; 
     isMouseButtonLastClicked = false; 
     mouseButtonLastClickedId = null; 
    }); 

問題は、keydownイベントが発生する前にコントロールのonCellSelectedイベントが発生していることです。これは予想される動作ですか?

コントロールのイベントが発生する前に、キーのIDを取得する方法はありますか?

ありがとうございます。

答えて

1

...
​​イベントを結合することは望ましい結果が得られていないので、あなたはonCellSelected機能を変更する必要があります。

  1. onCellSelectedが初めて起動されると、最初の引数(cell)は(一時的な)変数に割り当てられている:それは次のパターンに従ってください。
    • 押下されたキー(ev.which又はev.keyCode)が特定のキーに等しい場合、onCellSelected関数は以下のように一時的な変数の値を渡し、再び呼び出される:​​イベントが発生した場合、キーコードがチェックされているそして、
    • 最初の引数。
    • それ以外の場合、一時変数は覚えていないため、クリアされます。

コードの構造は次のとおりです。あなたのアプリケーションに合うように変更します。

var lastCell = null; 
function onCellSelected (cell) { 
    if(lastCell == null) { 
     lastCell = cell; 
     return; //Wait for the next listener 
    } 
    ... //Rest of code 
} 

$(document).keydown(function(e){ 
    if(lastCell == null) return; //No need to do unnecessary calculations 
    //Whatever you want, example: 
    if(e.keyCode == 32) { 
     onCellSelected(lastCell); 
     lastCell = null; //Reset 
    } 
    ... //Rest of code 
}); 

注:keyCodecharCodewhich、以下を参照してください。http://asquare.net/javascript/tests/KeyCode.html

0

私は、​​イベントを最初に(またはそれが可能な場合でも)起動させる方法についてまだよく分かりません。しかし、私はあなたがいつでも最後のウィンドウズイベントにアクセスできることを発見しました。だから、上記の私の元の質問に示されているように変数を設定するイベントに頼る代わりに、私は単にwindow.event.typeにアクセスします。ここで

は、いくつかのサンプルコードです:window.eventを使用する方法を示す:

if (window.event.type == "keydown") { //keyboard click 
    if (IsKeyNextType(window.event.which)) { //checks which key was pressed. In this case a key qualifying as "Next" (ie: Enter, Tab, etc) 
      //PERFORM NEXT ACTIONS 
    } 
    else { //"Previous" keys (ie: Up arrow, Left arrow) 
      //PERFORM PREVIOUS ACTIONS 
    } 
} 
else if (window.event.type == "click") { //mouse click 
    //PERFORM MOUSE CLICK ACTIONS 
} 
+0

を 'window.event'は、非標準のIEのみの機能です。 –

+0

@RobW:本当ですか? Chromeでは問題なく動作します。他のブラウザの同等のイベントは何ですか? –

+0

イベントオブジェクトは、イベントリスナーのコンテキストで意味を持ちます。イベントリスナーがトリガーされると、その関数の最初の引数はイベントオブジェクトです。 'window.event'は少なくともFirefoxではサポートされていません。 –

0

それは追加するには、コードのに依存します。

コードの最初のものが最初に実行されます。

また、2つの別々の関数(揮発性の可能性があります)の代わりにコールバックを使用する方が良いです。 SOチャットでの長い議論の後

関連する問題