我一直在制作这个小脚本,出于某种原因,其中一个变量不会增加它的价值。
代码如下所示:
function get_swf(mode){
var swf_path;
swf_update(); //Updating max_num
if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers
switch(mode){
case "random":
current = Math.floor((Math.random() * max_num) + 1);
swf_path = "uploads/" + current + ".swf";
break;
case "next":
current += 1;
if(current > max_num) current = 1;
swf_path = "uploads/" + current + ".swf";
break;
case "previous":
current -= 1;
if(current == 0) current = max_num;
swf_path = "uploads/" + current + ".swf";
break;
}
swfobject.embedSWF(swf_path, "lolswf", "800", "400", "9.0.0");
location.hash = current;
}
此代码位于函数中,变量:current
和max_num
是全局变量。
一切都按预期工作,除非调用“next”案例。在这种情况下,即使变量current
尚未达到max_num
,它也会设置为值“1”。例如,如果我设置:
max_num = 5
和current = 2
我将“next”current
设置为1。
我无法理解它,你能帮助我吗?
非常感谢!
修改
在进一步检查我的代码之后,我发现了一行似乎会破坏代码。 这一行高于我提供的代码。 (我已将代码更新为整个函数,因此您可以看到)
if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers
我对此行的期望是,它只是覆盖current
变量,因此用户并不总是必须从头开始。但是,为什么current
的值为“1”,即使它应该增加?为什么其他案例会按预期工作?
非常感谢你的时间!
答案 0 :(得分:1)
变量:
location.hash
如果是整数变量,则不支持replace方法。 Replace方法是字符串的属性。
现在,执行以下行:
if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers
它实际上将变量current转换为空或0。
现在在带有'next'大小写的switch部分中,只有两个语句对current进行操作:
它递增电流,即0 + 1 = 1
检查是否超过最大值,将其设置为1
在任何一种情况下,你当前都会获得1分。
希望有所帮助。
答案 1 :(得分:0)
您需要使用if和path变量交换位置。 你所做的是将当前设置为1,然后将其添加到你的swf_path字符串。
case "next":
current += 1;
swf_path = "uploads/" + current + ".swf";
if(current > max_num) current = 1;
break;
<强>更新强>
看起来你和以前一样做了同样的事情。在那里使用相同的修复
答案 2 :(得分:0)
如果你只是使用整数
,模数总是一个选项 case "next":
current = (current+1)%(max_num+1); // the modulus rollover
if(current == 0) current = 1; // in the case that the remainder is 0
swf_path = "uploads/" + current + ".swf";
break;