[解決済み] 子アンカーがクリックされたときに、親のonclickイベントが発生しないようにするにはどうすればよいですか?
2022-03-21 05:13:37
質問
現在、jQueryを使ってdivをクリックできるようにし、そのdivの中にアンカーも置いています。問題は、アンカーをクリックすると、両方のクリックイベントが発生することです(divとアンカー)。アンカーがクリックされたときにdivのonclickイベントが発火するのを防ぐにはどうすればよいですか?
以下は、壊れたコードです。
JavaScript
var url = $("#clickable a").attr("href");
$("#clickable").click(function() {
window.location = url;
return true;
})
HTML
<div id="clickable">
<!-- Other content. -->
<a href="http://foo.com">I don't want #clickable to handle this click event.</a>
</div>
解決方法は?
イベントは、クリックイベントがアタッチされた DOM の最も高いポイントにバブルします。つまり、この例では、div の中に明示的にクリックできる要素がなかったとしても、div のすべての子要素は、DIV のクリックイベントハンドラがそれを捕らえるまで、DOM 上でクリックイベントをバブル化することになるのです。
jQueryはイベントと一緒にeventargsオブジェクトを渡します。
$("#clickable").click(function(e) {
var senderElement = e.target;
// Check if sender is the <div> element e.g.
// if($(e.target).is("div")) {
window.location = url;
return true;
});
また、リンクにクリックイベントハンドラを添付して、リンクに イベントバブリングを停止する を実行した後、そのハンドラを実行します。
$("#clickable a").click(function(e) {
// Do something
e.stopPropagation();
});
関連
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueのグローバルがscss(mixin)を導入。
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
[解決済み] jQuery checkbox checked state changed event
-
[解決済み】absoluteの親divの子要素をホバーしたときのonmouseoutをjQueryなしで防止する。
-
[解決済み] JavaScriptを起動するリンクがクリックされたときに、Webページが一番上にスクロールしないようにするにはどうしたらよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
要素ツリー制御によるvueTreeテーブル
-
Vueの要素ツリーコントロールに破線を追加する説明
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
Vueのフィルタの説明
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
JavaScriptのStringに関する共通メソッド
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。