いよいよメインです。
上(Up)あるいは下(Down)キーが押されたときの処理です。
(1)最初に書いたとおり、
hotKeyプラグインを使うとキーのイベントを簡単に書くことが出来ます。
$(jFormElem).bind( 'keydown', 'down', function( event )
{
var keyPropagate = true;
// ・・・イベント処理・・・
return keyPropagate;
});
見たまんまです。最初に作成していたフォーム内の要素についてキーのイベント処理を書いています。おそらく、こう書くことでフォームの要素のフォーカスがあたっているときだけ、イベント処理が行われるはずです。
なお、イベント処理が実行された場合、キーのデフォルトの挙動を阻止しないといけません。そこでキーの処理が行われた場合、「keyPropagate」変数にfalseを設定します。
(2)やっとですが、
Upキーが押された場合の処理です。
// UPキーが押された場合の処理。
$(jFormElem).bind( 'keydown', 'up', function( event )
{
var keyPropagate = true;
if( !focusElem ) return keyPropagate;
if( !$(focusElem).attr( 'focusIndex' ) ) return keyPropagate;
if( $(focusElem).attr( 'type' ) == 'textarea' ) return keyPropagate;
var fIndex = parseInt( $(focusElem).attr( 'focusIndex' ) );
if( fIndex == 0 ) {
$(jFormElem).get( jFormLeng-1 ).focus();
}
else {
$(jFormElem).get( fIndex-1 ).focus();
}
keyPropagate = false;
return keyPropagate;
});
- if( $(focusElem).attr( 'type' ) == 'textarea' ) return keyPropagate;
テキストエリアの場合は、キーの処理を行いません。
- var fIndex = parseInt( $(focusElem).attr( 'focusIndex' ) );
プロパティ:focusIndexの値にはストリングで設定されるようです。
このままだと次の配列のインデックスとして使えないのでintに変換します。
- if( fIndex == 0 ) {
要素の先頭にフォーカスがあっている場合の処理です。
とまぁ、こんな感じで動きました。
Downキーの場合も似たような処理になります。
0 件のコメント:
コメントを投稿