javascript eval在问号后丢弃所有内容

时间:2012-08-01 19:41:36

标签: javascript

我肯定还在学习Javascript,如果这是一个非常基本的问题,请原谅我。

我正在尝试将图片网址列表旋转到href中。所有URL都有问号,因为URL正在传递给Web服务,以详细说明有关图像的特定变量。在标题中我将php $ imgAr分解为单独的javascript Image对象.src值。到目前为止,一切都很好。

图片网址例如:http://webservices.ashx?size=25

<script type="text/javascript">
<!--
var step = 1;
var timeOut;

function playforward() {
    if (!document.images) return
    alert(eval("image" + step + ".src"));
    document.images.slideleft.src = eval("image" + step + ".src")
    if (step < <?php echo count($imgArr); ?> ) step++
    else step = 1
    timeOut = setTimeout("playforward()", 500)
}

function stopPlay() {
    clearTimeout(timeOut);
}
//-->
</script>

在上面的代码中,我有基本图像名称的警报,其中步骤变量循环显示图像编号。当弹出警告框时,图像URL是正确的,但当我取出警告框并运行页面时,图像错误输出,属性显示问号后面的所有内容都被删除。

我知道eval不是一个很好的解决方案,但我不知道更好的解决方案。有人有什么建议吗?

编辑:

根据请求,这里是我用来创建图像变量的代码。此代码在Codeigniter控制器中调用并传递到文档头。我不相信这会有很大的帮助,但现在是:

for($i = 0; $i < count($imgArr); $i++)
    {
     $urlPieces = explode('?', $imgArr[$i]);
     $num = $i+1;
     $images .= 'var image'. $num .'=new Image()
       imageleft'. $num .'.src="'.$urlPieces[0].'" + "?" + "'.$urlPieces[1].'"; ';
    }

2 个答案:

答案 0 :(得分:1)

您根本没有理由在代码中使用eval

<? php ...应为<?php

<script type="text/javascript">

    var step = 1;
    var timeOut;

    function playforward() {
        if (!document.images) {
            return;
        }

        alert(window['image' + step].src);
        document.images.slideleft.src = window['image' + step].src;

        if (step < <?php echo count($imgArr); ?> ) {
           step++;
        } else {
           step = 1;
        }

        timeOut = setTimeout(playforward, 500);
    }

    function stopPlay() {
        clearTimeout(timeOut);
    }
</script>

答案 1 :(得分:0)

您有image1image2等变量

而不是将images变成数组:

var images = [];

那么,你可以这样做:

$images .= 'images['. $num .']=new Image()'

然后在您的JavaScript中,您可以使用:

images[step].src

P.S。不要将字符串传递给setTimeout,传递函数:

setTimeout(playforward, 500)