2011-01-13 14 views
1

私は複数の変更イベントがあります。私は、 "変更" をトリガーするときJquery:同じイベントのハンドラを1つトリガーします

$('#parent').change(function(){ console.log("first"); }); 
$('#parent').change(function(){ console.log("second"); }); 

それは両方のハンドラをトリガ

$('#parent').trigger('change') 

OUTPUT:私は(擬似コード)をやりたい

"first" 
"second" 

$('#parent').trigger('change:first') 

$('#parent').trigger('<handler_id>') 

OUTPUT

"first" 

私はこれをどのように行うのですか? そして、私は2つのハンドラが必要です。

おかげ

答えて

0

私の頭に浮かぶのは、2番目のハンドラが起動してはならない、または要素のハンドラをフェッチして最初のものを起動する必要がないときに、最初のハンドラでevent.stopImmediatePropagation() (jQuery find events handlers registered with an objectを参照)。

+0

stopImmediatePropagationでは、私のケースではコード変更が少なくて済みます。ありがとうございます。 –

0

あなたはnamespaced eventsを使用することができます。

$('#parent').bind('change.a', function(){ console.log("first"); }); 
$('#parent').bind('change.b', function(){ console.log("second"); }); 

$('#parent').trigger('change.a'); 

パターンがevent.namespaceです。 $('#parent').trigger('change')はまだ両方を起動します(何も失われていないので)。

3

イベントを割り当てるときにnamespacesを使用できます。

$('#parent').bind('change.first',function(){ console.log("first"); }); 
$('#parent').bind('change.second',function(){ console.log("second"); }); 

この方法であなたは

('#parent').trigger('change.first'); 

または

('#parent').trigger('change.second'); 

でそれらをトリガすることができますしかし、あなたは、通常のユーザーとの対話(はなく、手動でトリガによってイベントを発生する場合 )それは両方を発射するでしょう。

関連する問題