2016-11-17 6 views
1

後にクリックハンドラを追加します。再びスクロールします。jQueryのは、ユーザーがクリックしたとき、私は要素にクラスを追加したaddClass

$(document).on('click', '.scrolls', function() { 
    //scrolls nicely to that service description 
}); 

問題: はできるだけ早く私は、「.service-宣伝文句」要素の最初の時間をクリックすると、そのクラスを追加するだけではなく、スクロールします。ユーザーが2回目にクリックしたときにのみスクロールします。

答えて

4

は、イベントが文書に出てバブリングされ、その後、それはあなたが.scrollに一致する要素をクリックしたかどうかをチェックするので、それが委任ハンドラを実行することです。

イベントバブリングを停止するように最初のハンドラを変更します。

$('.service-blurb').click(function(e) { 
    $(this).addClass('scrolls'); 
    e.stopPropagation(); 
}); 
+0

彼はまた彼の第2のクリックハンドラを変更することができますが、代わりにクラス '.scrolls'を持つ要素に? –

+0

@GeorgeKatsanosいいえ、彼は 'scrolls'クラスを動的に追加しているので、委任を使わなければなりません。したがって、彼はクリックハンドラをバインドするとき、要素はクラスを持たないでしょう。 – Barmar

0

最初のクリックまでハンドラを追加したくないようですね。何が起こっている

$('.service-blurb').click(function() { 
    $(this).addClass('scrolls'); 
    $(this).off('click'); // Disable this handler now that we're done 

    $(document).on('click', '.scrolls', function() { 
     //scrolls nicely to that service description 
    }); 
}); 
+0

をチェックします。それは「文書」に添付いないように/ –

0

私が正しく理解していれば、event.preventDefault()が必要です。より多くの場合

$('.service-blurb').click(function(e) { 
    $(this).addClass('scrolls'); 
    e.preventDefault; 
}); 

...それはまだ自動的に2番目のクリックをトリガーしています...ここhttps://api.jquery.com/event.preventdefault/

関連する問題