解決方法1:は、currentTargetとターゲットの比較:
$("#parentEle").click(function(e) {
if(e.target == e.currentTarget) {
alert('parent ele clicked');
} else {
//you could exclude this else block to have it do nothing within this listener
alert('child ele clicked');
}
});
Fiddle
e.target
がイベントを開始した要素になります。
e.currentTarget
は、このクリックイベントでparentEle
になる(バブルアップする)場所になります。これは、これがリッスンしているものです。
同じ場合は、クリックが直接親にあることがわかります。
解決方法2:イベントはparentEleを打つ前に伝播を停止します。
他のオプションは、子要素上でのクリックがある場合、最初の場所でバブルアップからのイベントを防ぐためのものです。それは次のように行うことができます。
$("#parentEle").click(function(e) {
alert('parent ele clicked');
});
$("#parentEle").children().click(function(e) {
//this prevent the event from bubbling to any event higher than the direct children
e.stopPropagation();
});
Fiddle
2の主な違いは、最初のソリューションは、ちょうどこのリスナーでイベントを無視し、それがバブルアップキープできるようになるということです。これは、このparentEle
の親がイベントを取得する必要がある場合に必要です。
2番目の解決策は、parentEle
の直系子をバブリングすることからのクリックイベントをすべて停止します。したがって、parentEle
の親にクリックイベントがあった場合、これらのイベントは決して見られません。
が伝播を止めます! – adeneo
@adeneoありがとう! – Narong