2011-08-07 6 views
4

HTML/JSでグリッドコントロールを作成していて、できるだけExcelのように動作させたいと思います。ほとんどのナビゲーションと編集は既に終わっていますが、私が理解できないことが1つあり、私の場合はオンラインで見つかったものはすべて動作しませんでした。jQueryを使用して別の要素にイベントを転送する

最初に、私が実装した方法を少し説明します: テーブルを使用してグリッドを作成し、各tdにテキストボックスを挿入しました。 Excelでのように、セル内でダブルクリックしない限り、テキストボックスにはフォーカスがありません。つまり、セルをクリックするだけでそのセルを選択し、ダブルクリックしてセルを編集することができます。矢印キーを使用してナビゲートすることができます。これは、文書にキー押しイベントハンドラをアタッチすることによって行われました。

今、セルが選択されたら、単に入力するだけで編集を開始できます。これを行うために、ユーザーが表示可能な文字(e.charCode!= 0)を入力していることを確認し、選択したセルのテキストボックスにフォーカスを設定するナビゲーションを制御するコードをイベントハンドラに追加しました。これは、ユーザーが入力する最初の文字がテキストボックスで受信されないという点を除いては問題ありません。明らかに.triggerは行く方法です。ここでは、私がこれまでのところ、私は成功せずなどのkeyCode、charCodeは...のようなより多くのパラメータを渡してみました

self.editCell.trigger(jQuery.Event('keypress', {which: e.charCode})); 

試してみたものです。

入力コントロールにキーストロークを渡す最も良い方法は何ですか?

+2

'trigger'のみユーザランドのイベントハンドラを呼び出します。ネイティブイベントをシミュレートしません。 'self.editCell.val(e.charCode)'を実行できない理由はありますか? –

+1

意味があります。ええ、何らかの理由で私はそのアイデアに悩まされていたので、イベントに入力する必要があります。 .val()でそれをやっただけで、うまく動作します。私は今、愚かな気がする:P –

+1

個人的な知識のために、イベントを渡すか、キーストロークをシミュレートすることが可能かどうかを知りたい。ありがとう。 –

答えて

0

変更する唯一の動作は、矢印キーで他のセル間を移動することです。

ホワイトリスト処理の代わりに、ネイティブコードで重い荷物を扱い、矢印キーの使用量だけを検出させるのはどうでしょうか?以下のような

何か:

function cellKeyDown(e) { 
    if (e.keyCode > 36 && e.keyCode < 40) { 
     // select a new cell 
    } 
} 
関連する問題