@ledsun blog

無味の味は佳境に入らざればすなわち知れず

イベントハンドラーAの処理があるときはイベントハンドラーBの処理を止めたいです

ブラウザのJavaScriptの話です。 イベントハンドラーAの処理があるときはイベントハンドラーBの処理を止めたいです。

イベントハンドラーAは新しいNodeを作って選択します。 イベントハンドラーBは選択を解除します。

期待する動作は、新しいNodeができて選択されてほしいです。今はイベントハンドラーBが発火して、新しいNodeの選択が解除されます。

最初、stopPropagationを使おうと思いましたが、どちらのイベントハンドラーもリッスンしているElementは同じのため、伝播タイミングが同じなので、ダメでした。 とりあえず、イベントハンドラーAでイベントオブジェクトにフラグをたてて、イベントハンドラーBでフラグチェックすれば、期待通りに動作します。 もう少しかっこいい実装方法はないものでしょうか?

  1. イベントオブジェクトではない、何かで状態を持つ
  2. イベントハンドラーAのリッスンするElementを、子Elementにする(で、stopPropagationを使う)
  3. イベントハンドラーBをイベントハンドラーAより先に発火させる

結局2にしました。