1

クリックするたびに、クラスが存在するかどうかを確認しようとしました。クラスが見つかった場合は、enscrollプラグインをロードします。
しかし、問題は、クラスを見つけた後st2-wr || st2、クラスが存在するため、クリックイベントで enscroll プラグインを再度ロードすることです。

クラスを見つけた後、プラグインを一度だけロードしたい。

$('.embtn').delegate(this, 'click', function(){
    var $sec = $(this).closest('.sec'), 
        $parentSection = $sec.closest('.m_ms');

    if($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2')){
        $('.ms_box').enscroll({
                 showOnHover: true,
                 verticalTrackClass: 'track3',
                 verticalHandleClass: 'handle3'
         });
     }
});
4

3 に答える 3

3

私があなたの目標を理解した場合の可能なスニペット:

$('.embtn').on('click', function () {
    var $sec = $(this).closest('.sec'),
        $parentSection = $sec.closest('.m_ms');

    if (!$('.ms_box').data('enscroll') && ($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2'))) {
        $('.ms_box').enscroll({
            showOnHover: true,
            verticalTrackClass: 'track3',
            verticalHandleClass: 'handle3'
        }).data('enscroll', true);

    }
});
于 2013-06-01T09:19:34.043 に答える
1

1つの方法を使用できます

$("#foo").one("click", function() {
  alert("This will be displayed only once.");
});

もう 1 つの方法は、プラグインがロードされているかどうかを示す外部ブール変数を使用することです。

于 2013-06-01T09:05:04.813 に答える
0
(function(self) {
    function enscroll() {
        var $sec = $(this).closest('.sec'), 
            $parentSection = $sec.closest('.m_ms');

        if($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2')){
            $('.ms_box').enscroll({
                showOnHover: true,
                verticalTrackClass: 'track3',
                verticalHandleClass: 'handle3'
            });
            $('.embtn').off('click', self, enscroll);
        }
    }
    $('.embtn')
        .on('click', self, enscroll)
        .on('click', self, function() {
            // Other click handler executed each time
        });
})(this);
于 2013-06-01T09:17:26.477 に答える