如何使用仅在运行时已知的变量名称调用 JavaScript 函数
How do I call a JavaScript function with a variable name that is only known at runtime?
对于这个问题,我有一个PHP代码片段,它在目录中查找并返回文件列表。然后,我遍历数组并使用 echo 将每个文件名存储为 JavaScript 变量
考虑以下示例 witch 不包括用于生成映像名称的 PHP:
//result of PHP
image1="cow.jpg"
image2="pig.jpg"
image3="dog.jpg"
imgIndex=0 //global variable that will be incremented
function setBG(image) {
someElement.style.backgroundImage= "url(/images/" + image + ")"
};
function nextBG(){
imgIndex++
currentIMG="image"+imgIndex;
setBG(currentIMG);
};
调用函数时nextBG()
将不起作用。但这将:
function nextBG(){
setBG(image1);
};
我相信它不起作用的原因是因为第二个示例使用定义的变量 (cow.jpg) 的值调用函数。 但第一个例子是使用字符串"image1"
调用函数,witch显然不是图像的路径名。
有没有办法让我使用变量 image1
调用函数,然后image2
然后image3
等等,而不会将其解释为字符串?
使变量成为对象的成员。然后,您可以使用 [] 使用字符串访问对象成员:
var images = {
image1 : "cow.jpg",
image2 : "pig.jpg",
image3 : "dog.jpg"
};
function nextBG(){
imgIndex++
currentIMG="image"+imgIndex;
setBG(images[currentIMG]);
};
最简单的解决方案是将所有图像存储在一个数组中:
var bgImages = [
// All can be got with a call to encode your PHP array as JSON.
"cow.jpg",
"horse.jpg",
"dog.jpg",
"pig.jpg"
],
imageIndex = 0,
maxLength = bgImages.length - 1;
function setBG(image) {
someElement.style.backgroundImage= "url(/images/" + image + ")"
};
function nextBG(){
var currentIMG = bgImages[imageIndex];
setBG(currentIMG);
imageIndex = imageIndex > maxLength ? 0 : imageIndex + 1;
};
这是因为currentIMG是一个字符串,而不是一个变量。这是您要执行的操作。您有数组$images,它只是映像名称。在你的 HTML 中,你这样做
var images = <?php echo json_encode($images); ?>;
然后你可以这样使用 JavaScript
for(var i=0; var i < images; i++)
{
setBG(images[i]);
}
相关文章:
- AngularJS-在JSON选择器中使用变量名
- 命令行中的Uglify js;不要弄乱变量名
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 这在JavaScript中是一个好的变量名吗
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- 在Javascript中连接一个动态变量名
- 如何使用jQuery循环变量名
- JavaScript将字符串转换为变量名
- Angular 1.5变量在调用一次之前不起作用
- JQuery将函数名传递给变量并调用它
- 对变量表名调用fnGetData()
- json调用变量名
- Javascript调用函数-动态变量名
- 使用实参调用Javascript函数,并将实参用作变量名
- 如何通过变量名调用函数
- 在字段名调用中添加变量
- 如何使用函数结果来调用变量名
- 基于变量名调用jQuery自动完成小部件函数
- clearInterval变量名不断被调用,但出现时没有定义
- 为什么我的方法没有被变量名调用