2009年6月5日金曜日

jQuery::Up/Downキーでフォームを移動、パート4:Up/Downキーイベントを作成

いよいよメインです。 上(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 件のコメント: