2011-12-23 17 views
1

jQueryのデリゲートメソッドのシグネチャは、次のような文書化されていますjQueryの委任パラメータ注文

.delegate(selector, eventType, handler) 

は、パラメータがeventTypeをしてセレクタを交換し、以下を注文するだろうどのような状況はありますか?

.delegate(eventType, selector, handler) 

私は何をするにしても、まずeventTypeを入れなければならないというプロジェクトがあります。たとえば、この私の現在のプロジェクト(これは単なるテストではなく、実際のコードです!)で動作する唯一のものです:

$('body').delegate('click', 'input', function (e) { 
      alert("Why is this the only way it will work for me in this project?"); 
     }); 

文書によると、これは動作するはずです:

$('body').delegate('input', 'click', function (e) { 
      alert("This will never get hit"); 
     }); 

I小規模なプロジェクトでテストされ、ドキュメントに必要なように動作します(ここでは例js fiddle:http://jsfiddle.net/wmdYr/16/

Google CDNのjQuery 1.7.1を使用しています。

状況によっては、イベントが最初のパラメータになる必要がありますか?

答えて

1

私はこの問題を解決し、今jQueryのデリゲートメソッドのパラメータの文書順序を使用することができます。.delegate(selector, eventType, handler(eventObject))

たちのためのソリューションは、最新バージョン(1.9)にjQueryの検証ライブラリをアップグレードすることでした。私が取り組んでいるプロジェクトでは、Asp.Net MVCに同梱されている古いバージョンのjQuery検証ライブラリ(1.5.5)を使用していました。そのバージョンはjQueryのデリゲートメソッドと競合しているようです。 BACKBONE.JSは、ボンネットの下にjQueryのデリゲートメソッドを使用しているため

この競合はjQueryのデリゲートメソッドとBACKBONE.JSビューイベントに影響を与えます。

0

はい、delegate()からon()にアップグレードした場合です。

Hereさんのコードです。 2番目の例ではon()が使用されます。

+0

提供されているjsfiddleをチェックアウトするには '.delegate'を使用しますが、' target'と 'event'パラメータは' .on'形式です:http://jsfiddle.net/wmdYr/16/ – Jasper

+0

ありがとう!私はon()に切り替えませんでした.jsfiddleや小さなサンプルプロジェクトでうまく動作しているようです。可能な限り小さな部品を使って問題を抱えていた大規模なプロジェクトを打ち破りました。何をするにしても、最初にイベントを起こさせなければなりません。イベントを実行するときに文書化された順序を使用するbackbone.jsを使用する点を除いて、私はそれを検討するだけです。私のテストはバックボーンBTWの外でした。 paramsが別の順序である必要がある既知の状況がない限り、本当に奇妙で、おそらくSOでデバッグすることは不可能です! –