1

以下に示すような要素があります。

<div id="treeTable123" class="collapsed">
<div id="test"></div>
</div>

jqueryを使用して、クリック機能をid 'test'のdivにバインドしました。関数 1:

 $(document).delegate('#test', 'click', function(e){
   ....
 });

次のように、他の要素に別のバインドされたクリック関数があります: function2:

  $('[id^="treeTable"]').delegate('.collapsed', 'click', function(e){
  });

ID 'test' の div をクリックすると、両方のイベントが発生します。したがって、関数1内のイベントをクリックすると、関数2のイベントが発生しないようにしたいのですが、どうすればできますか?

4

4 に答える 4

1
$('[id^="treeTable"]').delegate('.collapsed', 'click', function(e){
   if($(e.target).closest('#test').length === 0) {
      // code placed inside this condition is not executed on clicking the element #test
   }
});
于 2012-09-14T13:21:14.940 に答える
0

簡単に使用できますe.stopPropagation()

より詳しい情報

于 2012-09-01T05:46:43.860 に答える
0

e.stopPropagation()フォームを最初のコールバックとして呼び出すだけです。これはデモhttp://jsfiddle.net/eyXT7/2/です。

于 2012-09-01T05:29:47.750 に答える
0

あなたがそれを持っているので、それは不可能です。イベントハンドラーが起動するには、イベントがデリゲートターゲットにバブルアップする必要があるため、デリゲーションを使用しない場合は、これを行うことができます。したがって、function2 は function1 の前に発火し、発火後に発火するのを防ぐことはできません。

 $('#test').on('click', function(e){
     e.stopPropagation();
   ....
 });

http://jsfiddle.net/r5JaL/

于 2012-09-01T06:05:26.310 に答える