32

on()jQuery関数を使用してイベントをアタッチし、。を使用してイベントを再度削除できることを知っていoff()ます。

既存のプロジェクトでは、次のようなコードに出くわすことがあります。

$("#SomeId").off("click").on("click");

または、次のような名前空間を使用する場合もあります。

$("#SomeId").off("click.namespace").on("click.namespace"); 

私の知る限り、イベントの特定の名前空間にアタッチできるイベントは1つだけです。

たとえば、単純に実行on("click")すると、指定した関数がアタッチされ、割り当てられている現在の関数が上書きされ、「クリック」イベントに追加されます。

これを行うon("click.namespace")と、指定した関数がアタッチされ、割り当てられている現在の関数が上書きされ、に追加されclick.namespaceます。

指定されたevent/event.namespaceに割り当てられた関数をすでにifにチェーンするoff("click")ことで、イベントを削除するポイントは何ですか?on("click)on()

それは私たちのコードの冗長な構文ですか、それとも私が見逃した理由がありますか?

kapa
編集-私は今少しばかげていると感じてくれてありがとう、私は上記の私の誤った知識を訂正しました。on("click.namespace1")何度か実行すると、data("events")オブジェクトがクリックイベント配列に追加され続けることがわかりました。

それが私自身の質問に答えると思います。そのoff("event.namespace")ため、その正確なevent/event.namespaceに他に何も添付されていないことを確認するために使用します。

4

3 に答える 3

46

実際には、1 つだけでなく、複数のイベント ハンドラーを同じイベントにアタッチできます。名前空間が使用されている場合でも。この簡単なデモをご覧ください。

実際、名前空間の利点の 1 つは、イベント ハンドラーのグループをマークし、後でそれらを簡単に削除して、複数回アタッチすることを避けることができることです。これは、この行が行うことです:

$("#SomeId").off("click.namespace").on("click.namespace"); 
于 2012-06-11T12:13:21.727 に答える
0

既存のハンドラーがあり (複数ある可能性があるため、この場合は連鎖するため)、それが.stopPropagation()を呼び出す場合、そのハンドラーは呼び出されません。上記のコードを記述すると、この問題を回避できます。

于 2012-06-11T12:15:19.887 に答える