0

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

我正在尝试将图像 URL 列表旋转到 href 中。所有的 URL 中都有问号,因为 URL 被传递到 Web 服务以详细说明有关图像的细节变量。在标题中,我将 php $imgArr 分解为单独的 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>

在上面的代码中,我有一个基本图像名称的警报,其中 step 变量循环显示图像编号。当弹出警报框时,图像 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].'"; ';
    }
4

2 回答 2

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>
于 2012-08-01T19:44:49.087 回答
0

您有诸如image1,image2等变量。

取而代之的是,做成images一个数组:

var images = [];

所以,那么你可以这样做:

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

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

images[step].src

PS不要将字符串传递给setTimeout,传递函数:

setTimeout(playforward, 500)
于 2012-08-01T19:46:07.297 回答