1

コード:

<div id="container">
    <div id="link">Link</div>
</div>​

$('#link').click(function (e) {
    console.log("link");                
});

$('#container').mousedown(function (e) {
    console.log("container");                
});

#linkをクリックすると、#containerハンドラーが起動しないようにしたいと思います。stopPropagation()またはを試しpreventDefault()ましたが、アプローチが間違っていると思いますか?

4

2 に答える 2

2

ハンドラーはmousedownハンドラーの前に起動するため、イベントが既に親要素にバブルアップしているため、ハンドラーからハンドラーをclickキャンセルすることはできません。mousedownclickmousedown

mousedown他のハンドラーを変更せずに、内部要素にハンドラーを追加して、mousedownイベントの伝播を停止します。

$('#link').click(function (e) {
    console.log("link");
}).mousedown(function (e) { //stops the mousedown event propagation from reaching
    e.stopPropagation();   //the parent element
});

$('#container').mousedown(function (e) {
    console.log("container");
});

フィドル

ハンドラーを切り替えて同じイベント (例: both ) を処理できる場合は、上記のハンドラーで行ったように、内側の要素のハンドラーからclick呼び出すことができます。event.stopPropagation()mousedown

于 2012-09-19T13:50:40.880 に答える
0

これらの質問/回答によると:

ハイパーリンクがクリックされたときに親コンテナーのクリック イベントが発生しないようにする

JQueryで子のイベントをトリガーするときにコンテナのイベントをトリガーしないようにする方法は?

e.stopPropagation();が正しい方法です。

http://jsfiddle.net/MN5KK/1/

mousedown編集:コンテナとリンクで使用しているように見えますがclick、クリックがリリースされているため、クリックの前にマウスダウンイベントが常に発生します。

于 2012-09-19T13:47:48.787 に答える