[解決済み】event.stopPropagationとevent.preventDefaultの違いは何ですか?
質問
同じことをしているように見えるのですが・・・。
片方はモダン、片方はオールドなのでしょうか?それとも、それぞれ対応するブラウザが違うのでしょうか?
私が自分でイベントを処理するとき(フレームワークなし)、私は常に両方をチェックし、存在する場合は両方を実行するだけです。(私はまた
return false
でくくられたイベントには効かない気がします。
node.addEventListener
).
では、なぜ両方なのか?両方チェックし続けた方がいいのでしょうか?それとも、実際には違いがあるのでしょうか?
(質問が多いですが、どれも同じようなものです =))
どのように解決するのですか?
stopPropagation
は、捕捉およびバブリングフェーズにおいて、現在のイベントがさらに伝播することを防ぎます。
preventDefault
は、そのイベントに対してブラウザが行うデフォルトのアクションを防止します。
例
preventDefault
$("#but").click(function (event) {
event.preventDefault()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
stopPropagation
$("#but").click(function (event) {
event.stopPropagation()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
と
stopPropagation
のみです。
button
のクリックハンドラ
が呼び出される一方で
div
のクリックハンドラ
は決して起動しません。
を使用する場合は
preventDefault
ブラウザのデフォルトのアクションが停止されるだけで、div のクリックハンドラはまだ実行されます。
以下は、MDNに掲載されているDOMイベントのプロパティとメソッドに関するドキュメントです。
IE9とFFでは、preventDefault & stopPropagationを使用すればよいでしょう。
IE8以下に対応するには、以下のように置き換えます。
stopPropagation
を
cancelBubble
を置き換えると
preventDefault
を
returnValue
関連
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] substrとsubstringの違いは何ですか?
-
[解決済み] nullはなぜオブジェクトなのか、nullとundefinedの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み] テスト
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み] jQueryのpreventDefault()が発動しない