0

問題は、親要素にイベント ハンドラーをアタッチするときです。子要素にも付けました。では、親のみにイベントをアタッチする方法。試しstopPropagation()/stopImmediatePropagation()ましたが、どちらも機能しません。

HTML

<div class="circle">
    <ul class="circle-child">
        <li><a href="#"></a></li>
    </ul>
</div>  

JavaScript

$(".circle").click(function() {
    console.log("clicked");
});

そして、これがjsfiddleデモです。

4

4 に答える 4

3

イベントは親にのみ関連付けられます。ただし、論理的には、子要素は親に含まれているため、子をクリックすると親もクリックされ、イベントがバブルするためハンドラーが起動します。

this(イベントがバインドされたアイテム)がイベントのターゲットであったかどうかを確認できます。これを試して:

http://jsfiddle.net/vtVpP/

$(".circle").click(function (e) {
    if (this === e.target) {
        console.log("clicked");
    }
});
于 2013-10-17T19:00:15.580 に答える
1

stop stopImmediatePropagation() を子要素に適用する必要があります。これにより、子要素からのイベントの伝播が停止します。

$(".circle-child").click(function(e) {
e.stopImmediatePropagation();
})

ここにフィドルがありますhttp://jsfiddle.net/Gnb25/

于 2013-10-17T19:20:30.427 に答える
0

あなたはこれを行うことができます

<div class="circle">
    <ul class="circle-child">
        <li><a href="#"></a></li>
    </ul>
</div>  



$(".circle").click(function(e) {
    if($(e.target).is($(this)){
        console.log("clicked");
    }
});

ただし、これは引き続き子要素を呼び出し、ターゲットがリスナーと同じかどうかを確認します

于 2013-10-17T19:00:36.090 に答える
0

event.target を確認することで、クリックされた要素が本来あるべきものであることをいつでも確認できます。

$('.circle').click( function(evt) {
    if ( $(evt.target).is('.circle') )
        alert("clicked");
});

修正されたjsfiddleの例を次に示します。

于 2013-10-17T19:11:11.127 に答える