-2

問題が発生しました

<div id='parent'>
  <div id='child'>
  </div>
</div>

私が欲しいのは、子がaddClassをクリックされたとき、そして親の残りがremoveClassをクリックされたときです。

$('#child').click(function(){
  $(this).addClass();
})
$('#parent').click(function(){
  $('#child').removeClass();
})

動作していないのは、子が実際に親の内部にあるためだと思います。そのため、子をクリックすると、親が右クリックされましたか?

どうすればそれを行うことができますか?

4

3 に答える 3

5

これを試して:

$('#child').click(function(evt){
  evt.stopPropagation();
  $(this).addClass("myClass");
});
于 2012-06-18T08:06:57.373 に答える
2

event.stopPropagationを使用して、イベントが DOM ツリーにバブリングするのを防ぎ、親ハンドラーにイベントが通知されないようにすることができます。

$('#child').click(function(e){
  e.stopPropagation();
  $(this).addClass();
});
于 2012-06-18T08:07:57.743 に答える
0

何人かのユーザーがすでに良い解決策を提案しています - これが機能する理由の説明です:

HTML 要素 (実際には DOM オブジェクト...) をクリックすると、クリック イベントがルート要素まで「バブル」します。たとえば、予想どおり、クリックインはクリックイン#childもトリガーします#parent

この動作を停止する.stopPropagation()には、クリック イベントを呼び出す必要があります。これにより、イベントを伝播させたくないが、「ローカル」のままにしておくことがブラウザーに通知されます。基本的に、ここでそれを処理したら、それはもう終わりであり、二度と見たくありません。

便利なことに、jQuery イベント ハンドラーはイベントを最初の引数として受け取るため、署名付きの関数を割り当てると、他の人が提案したようにfunction (e) { ... }イベントの伝播を停止できます。e.stopPropagation();あなたの場合、あなたが望む

$('#child').click(function(e){
  $(this).addClass();
  e.stopPropagation();
});
$('#parent').click(function(){
  $('#child').removeClass();
});
于 2012-06-18T08:13:53.187 に答える