言って別のイベントハンドラを割り当てるのですか?ハンドラを<ul>
に割り当てると、<li>
のいずれかをクリックするとトリガされます。はどのように似た構造を持っている私は、要素とその親
答えて
代わりに、あなたのリスト内の各要素のための単一のハンドラを設定するのは、親に単一のイベントリスナーを使用して、イベントの委任を使用して、ユーザーはあなたが使用することができます
$('ul').on('click', function(evt) {
id = evt.target.id;
switch (id) {
"a" : ... break;
"b" : ... break;
"c" : ... break;
default: ... ;
}
});
これは私がこれを行う方法:) +1 – Undefined
だから、基本的に言っている、1つのイベントハンドラをbody要素に適用し、そこから委任する必要がありますか? – Amberlamps
いいえ、身体にイベントをキャプチャする必要はありません。最初の親だけで十分です。多くのハンドラを設定するよりもパフォーマンスが良い – fcalderan
イベントが発生するたびに、イベントは「バブル」します。これは、それが関連付けられている実際の要素で呼び出されることを意味しますが、チェーン内のすべての親要素について、一番上まで一度も起動されます。あなたのケースでは、b
またはc
をクリックするたびに、イベントはa
のためにになるでしょう。これを避けるには、バブリングを止める必要があります。
具体的には、a、b及びcのためのあなたのイベントハンドラでは、あなたがこれを行うことにより、イベントバブルを停止する必要があります:
if (event.stopPropagation) event.stopPropagation();
else event.cancelBubble = true;
ほとんどのブラウザでは、バブリングを終了するイベントにstopPropagation
をサポートしています。 IEの古いバージョンはcancelBubble
プロパティを使用します。したがって、上記はブラウザ間で互換性があります。
は、私はあなたがjQueryのを指定していない知っているが、それはとても人気なので、それはあなたがjQueryのを使用している場合、この条件は、フレームワークの背後に隠されていることは注目に値しますので、あなたがちょうどすることができます
event.stopPropagation()
をクリックした要素のidであるかを検出する方が良いでしょうこの。
$('ul li#a').click(function(){
//some thing here...
});
$('ul li#b').click(function(){
//some thing here...
});
慎重に質問を再読してください – Bergi
すべてのイベントはDOMツリーを泡立たせます(または少なくともIEのように "should")。その泡立ちを止めたいかもしれません、Ben Lee's answerを参照してください。しかし、より良い方法があります:
あなたが視聴している要素に対してリスナーを引き起こしているイベントが発生したかどうかを確認してください。その後、ハンドラを実行するかエスケープします。
document.getElementById("a").addEventListener("click", function(e) {
var a = e.currentTarget; // reference to #a
var t = e.target; // this may be #b or #c or any of their children - or not
if (a != t)
return;
// else
// do what you wanted to do
}, false);
あなたのために+ 1 – Pranav
私のプロジェクトでも同じ問題が発生しました。私がしたのは、最初にグローバル変数として宣言されました(フラグの目的とデフォルト値false)。次に、すべての子に対してonmouseoverイベントとonmouseoutイベントをトリガし、カーソルが子の上にあるときはいつでもフラグの値をtrueに変更しました(子を離れるたびにfalseに戻す)。したがって、親のonclick関数を宣言する際には、フラグの値をチェックする条件を設定するだけです。
- 1. ツリー構造は、どのように私は、ツリー構造を持っている
- 2. Pythonの__import__がそうように私は、ディレクトリ構造を持っている
- 3. それはのは、私はそうのような構造体を持っていると言う場所
- 4. は、私はこれに類似したクラス構造を持っている
- 5. どのように私は次のように私は、ディレクトリ構造を持っている私の.FLA
- 6. iphone - 私はこのような構造を持っている
- 7. このような構造で、私はMavenプロジェクト内の親POMを持って
- 8. 私はTAILQ構造体持っている間違った構造体とmmap
- 9. jqueryの親、親、そして最も近い私は下のDOM構造を持って選択するか、セクションタグ
- 10. どの要素が、私は要素持っているjQueryの
- 11. は、どのように私はこのような構造を持っていた場合
- 12. 私は次のような構造を持つWebアプリケーションを持っている
- 13. どのようにvb.netの構造の配列の類似した要素を合計するには?
- 14. は、AJAXは、私は次のような構造を持っている
- 15. 私はこのようにMongoDBでの文書構造を持っている
- 16. GIT、私のようなディレクトリ構造を持っている-A
- 17. は、私はこのようなMavenの構造を持っている1戦
- 18. はそう、彼らは私は2つのdiv要素を持っている
- 19. のJavaジャクソンシリアライザは、私はそうのようなクラス構造を持っている
- 20. 私はこのようになりますクラス構造を持っている
- 21. は、私はこのようなディレクトリ構造を持っている
- 22. は、私は次のような構造を持っているCSS
- 23. TableServiceContextは、私は次のようなデータ構造を持っているValueObjects
- 24. ウィケット - 私はこのようになり、そのマークアップを持っていると仮定すると、マークアップ要素
- 25. 私はこのような構造持って
- 26. jQueryのslidetoggleは、私は次の構造を持っている
- 27. は、私は次のプロジェクト構造を持っているEclipseの
- 28. は、私は、次のURL構造を持っているのindex.php
- 29. NoSuchBeanDefinitionException:私は、このようなプロジェクトの構造を持っているannotaition
- 30. シルバー:私は私のXAMLコードを持ってどのように防ぐために、その親のキャンバス
タグIDに基づいて試してみませんか? – Unknown
@マトリックスの説明のため – onemach