【问题标题】:Variables as JavaScript Array Names变量作为 JavaScript 数组名称
【发布时间】:2012-05-09 16:23:15
【问题描述】:

问题:尝试使用“动态”变量访问 JSON/JavaScript 数组。

# 示例 #

而不是。 .. array1[ ] or array2[ ] or even array9000[ ]

类似... var my_array = 'array' + 'some generated number' ;

那么就... my_array [ ] my_array[某个数字]

但这不起作用...(解决方案 NOW 在底部)



我有一些 PHP 正在读取一些目录以及创建 JSON 数组的内容。 JSON 数组按顺序命名,它们存储图像目录...

JSON 数组名称示例: images0、images1、images2 等...

    <?php
        $dir = opendir(getcwd());
        $num=0;
        while($folder = readdir($dir)) {
            if($folder !== '.' && $folder !== '..'){
                if (is_dir($folder)) {
                    echo '<script type="text/javascript">';
                    $folderCHILD = opendir($folder);
                    while($image = readdir($folderCHILD)) {
                        if($image !== '.' && $image !== '..'){
                            $images[]=$folder."/".$image;
                        }
                    }
                    closedir($folderCHILD);
                    echo 'images'.$num.' ='.json_encode($images);
                    unset($images);
                    echo '</script>';
                    $num++;
                }
            }
        }
        closedir($dir);
    ?>


然后我有一些 Javascript/Jquery 正在“尝试”通过点击函数访问这些按顺序命名的 JSON 数组。该函数将使用存储在 JSON 数组中的图像目录创建图像。

<script type="text/javascript">
    $(document).ready(function() {
        $('something').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: ARRAY[some number]}).addClass("image").appendTo('body');
        });
    });
</script>

^上面的 Javascipt/Jquery 不起作用^


但是感谢 dev-null-dweller 这段代码可以工作...

<script type="text/javascript">
    $(document).ready(function() {
        $('#gallery_link p').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: window[ARRAY][some number]}).addClass("image").appendTo('body');
        });
    });
</script>

区别?

.attr({ src: window[ARRAY][some number]})

【问题讨论】:

  • 试着把你想做的事情提炼成最基本的形式。重写一段测试代码来展示一下,这里的信息太多了。

标签: php javascript jquery arrays variables


【解决方案1】:

我很确定你不能在 JS 中做到这一点。您不能将变量内容用作变量名。这在你可以做的php中是可行的

$varname = 'x';

$$varname = "something";

print $x; //Prints "something"

但不是在 javascript 中。只需使用多维数组或散列即可。

【讨论】:

  • 感谢您的信息,不知道这在 javascript 中是不可能的。 @Gaet所以...我尝试过修改多维数组,但我没有走得太远,因为我想不出在javascript中动态创建多维数组。感谢您的信息,我将尝试在我的 PHP 中进行设置。
【解决方案2】:

快速回答:您的数字变量应该可以在 window 对象中访问,像数组 (window['images1']) 一样访问,所以只需更改

{ src: ARRAY[1]}

{ src: window[ARRAY][1] }

应该让它工作。

正确答案:使用数组/对象,很简单:

<script>
echo '<script type="text/javascript">';
echo 'images = [];';
$folderCHILD = opendir($folder);
while($image = readdir($folderCHILD)) {
    if($image !== '.' && $image !== '..' && $folder !=='resource'){
        $images[]=$folder."/".$image;
    }
}
closedir($folderCHILD);
echo 'images.push('.json_encode($images).');';
echo '</script>';

然后:

{ src: images[indexCUR][1] }

【讨论】:

  • 谢谢!我要试试看!
  • 感谢您的意见,我无法得到您的“正确”答案(到目前为止,我仍在努力),但您的“快速”修复效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2023-03-27
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
相关资源
最近更新 更多