0

ポップアップを閉じるためのグローバルハンドラーを作成するとします。

  mouseup_handler: function(item, mouse_is_inside){
    if(!mouse_is_inside) {
      close_box(item);
      return false;
    };
  },

そして、私はそれをそのように添付します:

$("body").bind('mouseup', function(){ mouseup_handler($popup, mouse_is_inside);  });

bodyしかし、クロージングを担当する必要のあるオブジェクトが2つあるとします。

今、私がオブジェクトの1つのクローズを呼び出すとき:

 $("body").unbind('mouseup');

両方、または本体に接続されているマウスアップハンドラーが削除されます。私はもっ​​と具体的に言うことができます:

$("body").unbind('mouseup', mouseup_handler() );

ただし、これでも、すべてmouseup_handler()のを削除しても同じ問題が発生します。

body2つ(または多数)を区別しながら、同じハンドラーの2つのオブジェクト間で共有できる最小限のコードを記述するにはどうすればよいですか?

4

2 に答える 2

1

イベントハンドラーがjQueryを介して呼び出されるthisと、関連するDOM要素を参照します。したがって:

$('body').bind('mouseup', function() { mouseup_handler( this, mouse_is_inside ); });

(または、必要に応じて、コードをあまり投稿しなかったため、見分けるのは困難です。)

編集待機-にバインドしている<body>が、委任として実行している場合は、「バインド」ではなく「オン」でバインドする必要があります。

$('body').on('mouseup', 'selector', function() { ... });

そうすることで、がでthisはなく実際のイベントターゲット要素にバインドされるようにし<body>ます。「セレクター」は、関心のある実際の要素を識別する必要があります。

イベントハンドラーの動作を有効または無効にするには、要素にクラス名を追加または削除したり、ハンドラーでそれをチェックして何かを行うかどうかを決定したりする方がはるかに良いと思います。

于 2012-06-11T14:34:50.867 に答える
1

以前、これに対する優れた詳細な回答がありましたが、私はあなたの質問の詳細を明確にしようとします。

コードでバインディングを指定するには、イベントに名前空間を追加する必要があるようです。その形式は、この「event.namespace」のようになります。リンクされた例は次のとおりです。

$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');

さらに、jQueryのバージョンによっては、上記のようにオン/オフの利点を確認することをお勧めします。私の理解では、名前空間は両方で同じように機能しますが、バインド/バインド解除の実装よりもオン/オフの方法論に微妙な利点がある場合があります。

前の答えはここにあります。

よろしくお願いします、ナッシュ

于 2012-06-11T14:42:05.200 に答える