2012-03-19 13 views
1

特に、新しいJquery on()とJquery live()を使用する場合、Jquery/Jquery Mobileで複数のイベントバインディングが複数回発生することがあります。は、イベントがJqueryのイベントバインディングの数に関連付けられた数です。

例:

$(document).on("pagebeforechange", function (e, data) { 
     // stuff 
     }); 

私は次のことを思ったんだけど:
私は上記のような複数のバインドを持っている場合、彼らはかつてそれぞれ発生しますか私が使用しているとして、彼らは何度でも発動しますバインディング

例:
3文書/ pagebeforechangeリスナー=すべてのリスナーの1x
3文書/ pagebeforechangeリスナー=すべてのリスナーいくつかの明確化のための3倍

ありがとう!

答えて

0

.bind().on().delegate()などを呼び出すたびに、新しいユニークなイベントハンドラが作成され、キューに入れられます。

はい、これらのメソッドを呼び出すたびに、新しいハンドラが呼び出されます。それにうんざりしないでください。

例えば

<body> 
    <div> 
     <span>foo</span> 
    </div> 
</body> 

$('span').on('click', function() { 
    alert('span #1'); 
}); 

$('span').on('click', function() { 
    alert('span #2'); 
}); 

これは、我々はスパンをクリックしたときspan #2続いspan #1を警告します。

+0

しかし、ユニークなハンドラは他のハンドラをすべて起動させませんか?だから私の上記のバインディングが4倍を発射しているのであれば、私のスクリプトの中のどこか他の重複したバインディングか、私が使用している別のプラグインのためではありませんか? – frequent

+0

@frequent:私は質問をよく理解していません。私はその 'pagebeforechange'に精通していません。実際にこのイベントが複数回発生している可能性がありますので、このイベントのハンドラーはすべて解雇されるでしょう。しかし、それは私にはありそうもないようです。イベントハンドラを間違った/悪い場所に再バインドしているかもしれません。 – jAndy

+0

2つのバインディングを使用しているため、アラート( 'スパン#1')は2回発生せず、アラート( 'スパン#2')も2回発生しません。 – frequent