当我尝试将字符串传递给类似的函数时
i="file:///bla/bla/bla";
Fade(i);
我得到Uncaught SyntaxError: Unexpected token :
所以我尝试在像f("img1.jpg");
这样的函数中传递一个文字
我得到了
Uncaught ReferenceError: img1 is not defined
(anonymous function)
发生了什么事?
(请注意,我是js中的新手)
特别是:
timeout = 3;
var fadetime = 5;
var curr = 0;
var fadedelta = 100/(fadetime*30);
var opac = 100;
//var fadedelta = 100/(fadetime*3);
//prelaod all images just to have them there
var namearr = new Array( "img1.jpg", "img2.jpg", "img3.jpg", "img4.jpg");
var imgarr = new Array();
var i = 0;
for( i = 0; i<2 ; i++)
{
var tmp = new Image()
tmp.src = namearr[i];
imgarr.push(tmp);
}
function setOpacity(image, op)
{
if(typeof(image.filters) != 'undefined' )
{
image.filters.alpha.opacity = op;
}
else
{
image.style.opacity = op/100;
}
}
function fadeIn(isrc)
{
var locimg = document.getElementById("image");
opac -=fadedelta;
setOpacity(locimg,opac);
if(opac>0)
{
setTimeout("fadeIn(String("+isrc+"));", 30);
}
else
{
locimg.src = isrc;
setOpacity(locimg,100);
opac=100;
}
}
function Fade(isrc)
{
var locimg = document.getElementById("image");
var locdiv = document.getElementById("imageArea");
locdiv.style.backgroundImage = "url("+isrc+")";
fadeIn(isrc);
}
function aStatus()
{
var locimg = document.getElementById("image");
var locdiv = document.getElementById("imageArea");
alert("background: "+locdiv.style.backgroundImage+"\nforeground: "+locimg.src+"\ncurr: "+curr);
}
function onClick()
{
curr = curr + 1;
curr%=imgarr.length;
Fade(String(""+imgarr[curr].src));
}
,输出是Uncaught SyntaxError: Unexpected token :
错误,引用最后一行(Fade(String(imgarr[curr].src));
)
请注意,imgarr [curr] .src是file:///home/fakedrake/webdev/img1.jpg或file:///home/fakedrake/webdev/img2.jpg,具体取决于curr的值
答案 0 :(得分:2)
我得到了一个完全不同的错误,关于“在线”
之后的“缺失”参数列表fadeIn(file:///some/local/file.jpg);
然而,问题是相同的:解释器认为fadeIn
获取变量名称(在本例中为file:///some/local/file.jpg
,而不是有效的标识符)而不是字符串。
解决方案很简单:将单引号添加到
setTimeout("fadeIn('"+isrc+"')", 30);
// here ^ ^
答案 1 :(得分:0)
您很可能在显示的代码之前没有正确终止的String。
var str = "test
// ...
i="file:///bla/bla/bla";
f(i);
代码的亮点不言而喻。当它到达:
时,它会弹出错误,因为synthax无效。
答案 2 :(得分:0)
我对这一行感到好奇:
fadeIn(isrc);
我不确定该功能是做什么的,但你如何淡化字符串?
这不是你想要淡入的元素之一吗?
fadeIn(locdiv);
看到fadeIn
函数的代码,我发现它实际上应该得到一个字符串。但是函数中的代码导致字符串被评估为代码。
当您使用字符串调用setTimeout
时,该字符串将作为代码进行评估,并且您将该参数放在字符串中而不对其进行正确编码。你可以解决这个问题,但最好不要在setTimeout
调用中使用字符串:
window.setTimeout(function(){ fadeIn(isrc); }, 30);