Javascript以某种方式解析函数的字符串参数?

时间:2010-09-24 23:38:22

标签: javascript string parsing function

当我尝试将字符串传递给类似的函数时

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的值

3 个答案:

答案 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);