奇怪的Javascript行为

奇怪的Javascript行为,javascript,jquery,web,Javascript,Jquery,Web,我的页面上有以下代码,在页面重新加载后,它可以正常工作,但如果不重新加载,这个脚本将无法按预期工作 第一次使用:效果非常好 第二次使用:为什么它要跳过一节课? 第三个用途:它可以跳过2节课 如何在页面外重新加载的情况下刷新脚本,或者我需要做什么 $(document).ready(function(){ $('.partImg').each(function(){ $(this).click(function(){ $("#hideMod, #vi

我的页面上有以下代码,在页面重新加载后,它可以正常工作,但如果不重新加载,这个脚本将无法按预期工作

第一次使用:效果非常好
第二次使用:为什么它要跳过一节课?
第三个用途:它可以跳过2节课

如何在页面外重新加载的情况下刷新脚本,或者我需要做什么

$(document).ready(function(){  

 $('.partImg').each(function(){
        $(this).click(function(){
            $("#hideMod, #visMod, #nextP, #closeP, #prevP").fadeIn(400);
            $(this).next().addClass("ASert");
            var AV = $(".ASert").text();
            $('#visMod').html("<img src='" + AV + "'/>");

            $("#nextP").click(function(){
                if ($('.hidePart:last').hasClass("ASert") ) {
                    $('.hidePart:first').addClass("ASert");
                    $('.ASert').last().removeClass("ASert");
                } else {        
                    $('.ASert').next().next().addClass("ASert");
                    $('.ASert').first().removeClass("ASert");
                }
                var AV = $(".ASert").text();
                $('#visMod').html("<img src='" + AV + "'/>");
            });

            $("#prevP").click(function(){
                if ($('.hidePart:first').hasClass("ASert") ) {
                    $('.hidePart:last').addClass("ASert");
                    $('.ASert').first().removeClass("ASert");        
                } else {        
                    $('.ASert').prev().prev().addClass("ASert");
                    $('.ASert').last().removeClass("ASert");        
                }
                var AV = $(".ASert").text();
                $('#visMod').html("<img src='" + AV + "'/>");
            });        

            $("#closeP").click(function(){
                $("#hideMod, #visMod, #nextP, #closeP, #prevP").fadeOut(200);
                $(".ASert").removeClass("ASert");
            });
       });
    });
});
$(文档).ready(函数(){
$('.partImg')。每个(函数(){
$(此)。单击(函数(){
$(“#hideMod,#visMod,#nextP,#closeP,#prevP”)。fadeIn(400);
$(this.next().addClass(“ASert”);
var AV=$(“.ASert”).text();
$('#visMod').html(“”);
$(“#nextP”)。单击(函数(){
if($('.hidePart:last').hasClass(“ASert”)){
$('.hidePart:first').addClass(“ASert”);
$('.ASert').last().removeClass(“ASert”);
}否则{
$('.ASert').next().next().addClass(“ASert”);
$('.ASert').first().removeClass(“ASert”);
}
var AV=$(“.ASert”).text();
$('#visMod').html(“”);
});
$(“#prevP”)。单击(函数(){
if($('.hidePart:first').hasClass(“ASert”)){
$('.hidePart:last').addClass(“ASert”);
$('.ASert').first().removeClass(“ASert”);
}否则{
$('.ASert').prev().prev().addClass(“ASert”);
$('.ASert').last().removeClass(“ASert”);
}
var AV=$(“.ASert”).text();
$('#visMod').html(“”);
});        
$(“#关闭”)。单击(函数(){
美元(“#hideMod,#visMod,#nextP,#closeP,#prevP”)。淡出(200);
$(.ASert”).removeClass(“ASert”);
});
});
});
});
在这里你可以看到问题的观点

  • 单击任何图像并尝试上一个/下一个
  • 关闭灯箱
  • 再次单击图像并尝试上一个/下一个

  • 这是javascript中非常常见的问题。在单击处理程序内部,您正在绑定另一个单击处理程序。如果有必要,应在某个位置执行解绑

    然而,这似乎没有必要。因此,我建议以这种方式重构代码:

    $(function(){
        $("#nextP").on("click", function(){
            //...
        });
        $("#prevP").on("click", function(){
            //...
        });
        $("#closeP").on("click", function(){
            //...
        });
        $('.partImg').on( "click", function(){
            $("#hideMod, #visMod, #nextP, #closeP, #prevP").fadeIn(400);
            //...
        });
    });
    

    希望这有帮助。

    你的问题很难理解。1) 没有任何缩进尝试的大墙o'文本,因此可读2)几乎没有/没有实际问题的描述3)没有关于如何重现问题的信息。您应该尝试缩进代码,以便其他人可以阅读。您可以尝试将所有的.click(function(){…})替换为.on('click',function(){…})。我认为您必须包含html,以便任何人都能理解您试图执行的操作。我已尝试正确缩进您的代码,但我怀疑你能否得到任何合理的答案,因为问题含糊不清,而且缺乏解决问题所需的信息。正如@Ringo所提到的,我猜问题在于
    点击
    方法。你的点击并没有解除绑定,我最近刚刚替换了。点击(function(){…})为.on('click',function(){…}),但它对我不起作用。非常感谢,现在它可以工作了。