問題は、アンカーをクリックしても<div>
. これを「イベント バブリング」と呼びます。
実際、複数の解決策があります。
実際のターゲット要素がアンカーだったかどうかを DIV クリック イベント ハンドラーで確認する
→ jsFiddle
$('#myDiv').click(function (evt) {
if (evt.target.tagName != "A") {
alert('123');
}
// Also possible if conditions:
// - evt.target.id != "ancherComplaint"
// - !$(evt.target).is("#ancherComplaint")
});
$("#ancherComplaint").click(function () {
alert($(this).attr("id"));
});
アンカークリックリスナーからのイベント伝播を止める→ jsFiddle
$("#ancherComplaint").click(function (evt) {
evt.stopPropagation();
alert($(this).attr("id"));
});
お気づきかもしれませんが、例から次のセレクター部分を削除しました。
:not(#ancherComplaint)
ID として.expandable-panel-heading クラスを持つ要素がないため、これは不要でした#ancherComplaint
。
アンカーのイベントを抑制したいと思います。両方のセレクター (あなたのものと私のもの) がまったく同じ DIV を選択するため、その方法では機能しません。セレクターは、呼び出されたときにリスナーに影響を与えません。リスナーを登録する要素のリストを設定するだけです。このリストは両方のバージョンで同じであるため、違いはありません。