2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

いままでなんとなくで理解していたe.preventdefault()にいて考える機会があったのでざっとまとめてみます

挙動について

e.preventdefault()はイベント自体を伝播しないようにするものだと思っていたが、イベント自体をそもそもしないということがわかった

たとえば、入力をしているときにe.preventdefaultをした場合はそこで発生したイベント(たとえばキーダウン)などはなかったことにする

勘違いしていたやつ

イベントは発生するが途中で伝播を止めるのはe.propagationというのが別にある
この動きこそが当初勘違いしていたものであった

では伝播を阻止するのはなぜか

例えばAコンポーネントの中にBコンポーネントが入っていたとする

Aコンポーネントでイベントをうけとるとユーザーを削除
Bコンポーネントでイベントをうけとるとユーザーフォームの内容を確定する

としたときに、Bコンポーネントで発生したイベントをBコンポーネントで阻止しておかないとAコンポーネントに伝播して、Aコンポーネントでは削除をしたいのかとイベントから判断してユーザーを削除することになる

実際にこんな実装になることは殆どないが、イメージはこんなかんじ

おわりに

図解するともっとわかりやすいのですが、今回はざっとまとめるだけにしました
なんとなく理解していたのが理解したというところまでいったのでよかったです

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?