2011-12-15 7 views
1

まず、jQueryライブラリの古いバージョン(1.4.2)を使用しています。 jQuery 1.7へのアップデートには(特にバグを捜すのに)時間がかかるので、1.4.2で動作する解決策を探しています。jQuery:自己への委任?

function _setupGui($domNode, selector){ 
    $domNode 
    .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ } 
    .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ } 
    .delegate(selector, 'click', function(){ /* do smth awesome */ } 
} 

と「自己」を選択することを可能にするセレクタを与えることができる:

私は関数を記述します。

デリゲートに渡すことができるセレクタがあります。デリゲートを保持するノードを選択できますか?

jQuery 1.7では、$domNode.on('click', null, function(){/*handler*/})はそれだけで、$domNode.delegate(null, 'click', function(){/*handler*/})の実際の実装です。 しかし、1.4.2では、後者は何もしません。

これは以前のバージョンとのセマンティクスの変更ですか?

+0

委任するのではなく、要素にハンドラを追加する方法とは違いますか?多分私は誤解しています。 –

+0

@James:あなたはそうではありません。イベントをバインドするための単一のエントリーポイントを持っているだけです。 – LeGEC

答えて

1

あなたが本当に望んでいると思うのは、ハンドラを要素に直接添付して、delegateを使用しないことです。あなたはこれを自分で処理することができます。これはおそらく、「自己」を渡すことは単にイベントを添付することを意味します:

function _setupGui($domNode, selector){ 
    if(selector == "self"){ 
     $domNode 
      .mouseenter(function(){ /* do smth awesome */ }) 
      .mouseleave(function(){ /* do smth awesome */ }) 
      .click(function(){ /* do smth awesome */ }) 
    }else{ 
     $domNode 
      .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ }) 
      .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ }) 
      .delegate(selector, 'click', function(){ /* do smth awesome */ }) 
    } 
} 
+0

私がしたいのは、ハンドラーを直接要素にアタッチすることですが、バインドに詰まっていない)対生()対オン()対討論。私は()はこれをしようとしたと思うが、IMHOは糖衣になり、バグは砂糖が好きだ。私は戦いの弱者であり、誰もがそれを離れるので、代議員()に決着をつけた。パフォーマンスのヒットは、人間が何かをしたときに起こることがほとんどないと考えているときには無視できるので、私はすべてをボディやドキュメントにバブルアップさせます。これはコンピュータの時間スケールでよく起こることではありません。 – DaveWalley