prototype.jsで関数のスコープを任意のオブジェクトに委譲する Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど jQueryには意外とそれっぽい機能がないように思う。 ので応急処置として以下のコードを書いておく。

jQuery.scope = function(target,func){ return function() { func.apply(target,arguments);}};

こう使います。

$.ajax({
  url:'hoge.xml',
  complete: $.scope(this,handleComplete)
});
function handleComplete(data,status){ ... }

スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。

時間があれば、さくっとプラグインにしておきたいけど プラグインにするほどのコード量じゃないし、 プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。

ちなみに、これはActionScriptでいうところの mx.utils.Delegate.createと全く同じ機能ですね。

Posted in ajax, javascript, jquery at 2月 21st, 2008. 3 Comments.

jQueryでホットキーを処理するメモ

どの入力フォームにもフォーカスしていない場合 nとpで特定の処理を実行するサンプル

$(this).keypress(
  function(e)
  {
    if( $.inArray(e.target,$('input')) < 0 )
    {
      if( e.which==112 )
      {
        hoge();
      }
      else if( e.which==110 )
      {
        foo();
      }
    }
  }
)
Posted in javascript, jquery, 日記 at 2月 1st, 2008. No Comments.