質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2094閲覧

[javascript] event.preventDefault()について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/03/06 17:08

経験1年目の javaPG です。

event.preventDefault()を使うシチュエーションついて質問です。

.preventDefault()はイベントによるブラウザの操作をキャンセルする
.stopPropagation()は親要素にバブリングさせない
という程度にバブリングを制御するメソッドと認識ですが、

clickイベントなどでバブリングを制御したほうがいいシチュエーション、機能は何が考えられますか。
何でもかんでもイベントを呼ぶ場合は、バブリングの制御をしたほうが良いのでしょうか。
使い分け、こういう時は必要ない、などご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

バブリングの制御をするケースとしては、
例えばモーダルを開いた時、
・モーダル以外をクリックしたら、モーダルを消したい
・モーダルをクリックしても何も起きない

この2つの条件を満たす実装をするケースを考えます。
前者を実現するために bodyタグに対してモーダルを閉じるクリックイベントを設定するとします。

そうすると、通常、モーダル自身もbodyタグ内に存在するため、モーダルをクリックするとイベントがバブリングしていき、bodyまで到達します。
そのため結果的に「モーダルをクリックすると、モーダルが消える」挙動が起きてしまいます。

この挙動を制御するために、モーダル自体のクリックイベントとして、stopPropagation()を設定する必要があります。
これで、モーダルおよびその内側の要素をクリックしても、bodyまでイベントがバブリングしないので、モーダルが消えることはなくなります。

投稿2017/03/06 22:52

編集2017/03/06 22:54
yamato_hikawa

総合スコア2092

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JavaScriptのアクション専用に<a>タグを置いていた場合、そのまま放置していればclickhrefへの遷移が起きてしまいます。そのため、e.preventDefault()で、デフォルトの操作を止める必要が出てきます。

なお、この場合は、href="javascript:void(0)"のようにすることでも対応は可能です。

投稿2017/03/06 22:12

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問