jQuery:Eventhandler仅工作一次

丹尼洛

也许您听说过bxSlider这是用于各种内容的常用jQuery滑块。我使用它,我希望每次单击“下一个”或“上一个”控制按钮时都会发生某些事情。在正文的正下方-我加载jQuery的标签。以下脚本位于页面底部。

我的问题是,函数“ loadNext”仅被调用一次。甚至不会触发.click。这是为什么?控制台中没有错误。

$(document).ready(function () {  

    // Initializing the slider, not that important for you, I guess   
    var viewWidth = $(window).width();
    slider = $('#carouselSlider').bxSlider({
        minSlide: 1,
        maxSlide: 1,
        slideWidth: viewWidth,
        infiniteLoop: false,
        hideControlOnEnd: true
    });

    // Initializing a 2nd slider inside the previous (main)slider. That works fine.
    $('.tada').bxSlider({
        startSlide: 0,
        controls: false,
        minSlide: 1,
        maxSlide: 1,
        slideWidth: 600,
        pagerCustom: '.bx-pager-own'
    });

    // This function should be called. Works fine (once).
    function loadNext() {
        currentSlide = slider.getCurrentSlide();
        var chainIDs = <?php echo json_encode($allChainIDs); ?>;
        var dataToSend = {'currentSlide' : currentSlide, 'chainIDs[]' : <?php echo json_encode($allChainIDs); ?> } ;


        //Main Images
        $.ajax({
            type: "POST",
            url: "./backend/getImages.php",
            data: dataToSend,
            cache: false,
            success: function(html){                    
            $("#"+ chainIDs[currentSlide + 1]).html(html);
            slider.reloadSlider({
                 startSlide: currentSlide
            });
            }
        }); 
    }   


    var steps = 0;
    var prevsteps = 0;

    // I assume, that the problem is lying here
    $('a.bx-next').click( function() {
        console.log("Clicked 'next'"); // that happens only once!!
        steps++;
        if(steps % 1 == 0 && steps > prevsteps){
        loadNext();
        prevsteps = steps;
        }
    });

    $('a.bx-prev').click( function() {
        steps--;

    }); 
});
安迪

问题是

slider.reloadSlider({
    startSlide: currentSlide
});

重新创建滑块元素。由于原来的按钮已被替换,因此这会中断click事件处理程序。

您可以将其更改为.on(),它应该可以工作。例如。

$('body').on('click','a.bx-next',function() {
    console.log("Clicked 'next'"); // that happens only once!!
    steps++;
    if(steps % 1 == 0 && steps > prevsteps){
    loadNext();
    prevsteps = steps;
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章