0

これが実際にイベントのバブリングの問題であるかどうかはわかりません。event.stopPropagation()問題を解決しません。シナリオは次のとおりです。

  1. クリック要素クラス 'clickMe' (必要な数のクリック)
  2. 次にli要素をクリックします。クリック イベントは、「clickMe」クラスのクリック数に基づいて実行されます。

以下はコードのスニペットです。

html:

<div class="clickMe">Click Me 1</div>
<div class="clickMe">Click Me 2</div>
<div class="clickMe">Click Me 3</div>
<ul id="test">
    <li><a href="#">Test A</a></li>
    <li><a href="#">Test B</a></li>
    <li><a href="#">Test C</a></li>
</ul>​​​​​​​​​​​​​​​​​​

js:

$(function() {
    $('.clickMe').live('click', function(e){
        //e.stopPropagation()
        $('li', $('#test')).live('click',function(e){
            //e.stopPropagation()
            alert('ouch')            
        })        
    })
});

この問題に関するヘルプまたは説明を事前にありがとうございます。

4

3 に答える 3

2

「clikMe」要素の 1 つで「クリック」が発生するたびに、要素に別のクリック ハンドラを追加します。jQuery コードはこれらのハンドラーをすべて保持しているため、「clickMe」を数回クリックすると、いくつかのハンドラーがあり、それらがすべて呼び出されます。<li><div>

この.live()メソッドは、イベント処理を委任する最良の方法ではありません。新しいバージョンの jQuery を使用.on()している場合、または少なくとも.delegate().

于 2012-05-15T20:25:42.150 に答える
2

クリックするたびに、li要素でclickMeあるイベントを添付しています#test

liveは、現在および将来において、セレクターに一致するすべての要素のイベント ハンドラーをアタッチします。

両方を分離して使用する

$('.clickMe').on('click', function(e) {
    //e.stopPropagation()
})
$('li', $('#test')).on('click', function(e) {
    //e.stopPropagation()
    alert('ouch');
});
于 2012-05-15T20:25:49.673 に答える
1

フィドル:

http://jsfiddle.net/iambriansreed/aEkNa/

jQuery:

$(function() {
    var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;

    $('.clickMe').on('click', function(e){
        clickme_clicks++;        
        clearTimeout( clickme_timeout );
        clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
    });

     $('li a', $('#test')).on('click',function(e){
        e.preventDefault();
        //if(clickme_clicks == 0) return;
        alert('clicks: ' + clickme_clicks );         
    })  
});​
于 2012-05-15T20:31:24.440 に答える