我肯定还在学习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].'"; ';
}
答案 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)
您有image1
,image2
等变量
而不是将images
变成数组:
var images = [];
那么,你可以这样做:
$images .= 'images['. $num .']=new Image()'
然后在您的JavaScript中,您可以使用:
images[step].src
P.S。不要将字符串传递给setTimeout
,传递函数:
setTimeout(playforward, 500)