Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的js代码有严重错误,有人能帮我调试吗?_Javascript_Jquery - Fatal编程技术网

Javascript 我的js代码有严重错误,有人能帮我调试吗?

Javascript 我的js代码有严重错误,有人能帮我调试吗?,javascript,jquery,Javascript,Jquery,我正在尝试编写这个工具,从一系列日期为游戏地图制作动画。流程如下: 1st:选择游戏世界 2nd:设置地图显示参数(日期范围、地图类型和动画速度) 3rd:js代码根据日期抓取png文件,并根据动画速度逐个显示 我遇到的问题是: 如果只单击一个世界,然后单击“动画”,则一切正常,动画显示正确。然后,如果选择另一个世界(不刷新页面),动画会闪烁或以某种方式显示来自其他世界的图像。我不知道是什么原因导致了这一切(我在js完全是n00b) $(函数(){ $(“#图像_区域”).hide(); $(“

我正在尝试编写这个工具,从一系列日期为游戏地图制作动画。流程如下:
1st:选择游戏世界
2nd:设置地图显示参数(日期范围、地图类型和动画速度)
3rd:js代码根据日期抓取png文件,并根据动画速度逐个显示

我遇到的问题是: 如果只单击一个世界,然后单击“动画”,则一切正常,动画显示正确。然后,如果选择另一个世界(不刷新页面),动画会闪烁或以某种方式显示来自其他世界的图像。我不知道是什么原因导致了这一切(我在js完全是n00b)

$(函数(){
$(“#图像_区域”).hide();
$(“#tw_图像”).hide();
$('#W40')。单击(函数(){
$(“#tw_图像”).hide();
显示图像区域(“40”);
});
$('#W42')。单击(函数(){
$(“#tw_图像”).hide();
显示图像区域(“42”);
});
$('#W56')。单击(函数(){
$(“#tw_图像”).hide();
显示图像区域(“56”);
});     
});
功能显示图像区域(世界){
$(“#tw_图像”).hide();
如果(世界==“40”| |世界==“42”| |世界==“56”){
$(“#映射通知”).remove();
$(“#图像_区域”).prepend('W'+world+'地图从2011年4月7日开始提供,之前的所有日期无效,且地图将不可用);
}
$(“#date_from”).datepicker({showAnim:'blind'});
$(“#date_to”).datepicker({showAnim:'blind'});
$(“#图像_区域”).show();
$(“#动画”)。单击(函数(){
$(“#tw_图像”).hide();
var date_from=$(“#date_from”).val();
var date_to=$(“#date_to”).val();
如果(!(日期从和日期到)){
警报(“需要起始日期和截止日期”)
返回false;
}
var map_type=$(“#map_type”).val();
变量速度=$(“#速度”).val();
var days=daydiff(parseDate(date_-from),parseDate(date_-to));
var date_one=新日期(date.parse(date_from));
var b=date_one.toISOString().split(“T”)[0]。split(“-”;
var c=获取映射类型(映射类型)+b[0]+b[1]+b[2];
var宽度=获取映射类型映射宽度(映射类型);
var img_load=”“+world+“/”+c+“.png”;
$(“#图像_区域”).load(img_load,function(){
$(“tw#u图像”).attr(“宽度”,宽度);
$(“#tw_image”).attr(“src”,img_load);
$(“#tw_图像”).show();
$(“#调试”).html(“world=“+world”);
});
var i=0;
var interval=setInterval(
函数(){
date_one.setDate(date_one.getDate()+1);
b=date_one.toISOString().split(“T”)[0]。split(“-”);
c=获取映射类型(映射类型)+b[0]+b[1]+b[2];
var src_one=“+world+”/“+c+”.png”;
var img=新图像();
img.src=src_one;
img.onload=函数(){
$(“#tw_image”).attr(“src”,img.src);
$(“#调试”).html(“world=“+world”);
}
i++;
如果(i>=天)清除间隔(间隔);
},速度);
});
}
函数获取映射类型(映射类型){
如果(映射类型==“topk”){
返回“topktribes”;
}
如果(地图类型==“toptribe”){
返回“顶级部落”;
}
如果(映射类型==“topnoble”){
返回“顶级贵族”;
}
}
函数get\u map\u type\u width(map\u type){
如果(映射类型==“topk”){
返回1000;
}
如果(地图类型==“toptribe”){
返回1300;
}
如果(映射类型==“topnoble”){
返回1300;
}
}
函数解析日期(str){
var mdy=str.split('/');
返回新日期(mdy[2],mdy[0]-1,mdy[1]);
}
函数daydiff(第一、第二){
返回(第二优先)/(1000*60*60*24)
}

好的,我想我这里有一个解决方案,尽管它不是我想的那样。基本上,每次调用image\u area\u world时,都会在“动画”按钮上创建一个新的单击处理程序。由于JavaScript作用域的工作方式,在创建时,单击处理程序的世界变量保持不变

无论如何,要解决这个问题,您可以在定义单击处理程序之前尝试这样做

$("#animate").unbind("click");
$("#animate").click(function () { *code* }
一对夫妇的工具,以帮助你


  • 还有一点解释工作原理,好的,我想我这里有一个解决方案,虽然它不是我想的那样。基本上,每次调用image\u area\u world时,都会在“动画”按钮上创建一个新的单击处理程序。由于JavaScript作用域的工作方式,在创建时,单击处理程序的世界变量保持不变

    无论如何,要解决这个问题,您可以在定义单击处理程序之前尝试这样做

    $("#animate").unbind("click");
    $("#animate").click(function () { *code* }
    
    一对夫妇的工具,以帮助你


  • 还有一点解释工作原理

    您是否尝试过使用Firebug进行故障排除?看看发生了什么,或者抛出了什么错误…我做了,我能弄清楚的是,每次它加载了很多其他世界的图像,但我仍然不能弄清楚是什么导致了它。你在预加载所有图像吗?我相信我在代码中,虽然我在js的n00b,我不是100%确定。我想说,即使你更改了地图,你的间隔仍在循环,尽管目前我仍在研究如何修复它。你试过使用Firebug来修复它吗