检索包含变量本身的Jquery变量名的值

时间:2015-03-16 21:11:50

标签: javascript jquery variables

在我的Jquery的顶部,我有很多变量(与值相关联),称为:files_1,files_2等。

它们是在我的页面底部的脚本中创建的:

<script>
$(function () {
    <?php foreach ($folders as $f) { ?>
    var files_<?=$f['request_id']?> = 0;
    <?php } ?>
    …
});
</script>

在我的HTML中,我有一个类似的链接:

<a href="#" class="delete" data-request-id="2" title="delete">Delete</a>

data-request-id参数给出了一个数字,你在我的变量名称中得到的数字。在我的示例中,它的data-request-id =&#34; 2 &#34; :files_ 2

接下来,我有一个Jquery函数来捕获链接中的数据值:

$('.request-files').on('click', 'a.delete', function (e) {
    e.preventDefault();
    var $link = $(this);
    var $id = $link.data('request-id');
    console.log(files_$id); // <-- It doesn't work
});

我需要做的是检索变量 files_x 的值。在我的示例中,我尝试使用 files_ $ id 来获取它们,但它不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您在全局scrope中定义了变量,则它们将附加到window对象。因此,您应该能够通过在窗口对象上使用括号表示法来访问变量:

$('.request-files').on('click', 'a.delete', function (e) {
    e.preventDefault();
    var $link = $(this);
    var $id = $link.data('request-id');
    console.log(window['files_' + $id]); // <-- It DOES work
});

UPD :您的变量位于document.ready函数($(function() {...});)的闭包中,因此您无法从其他作用域访问它们。我假设您的点击处理程序也在该闭包内。我可以建议使用名为file_<ID>的属性创建一个单独的对象 - 它与窗口一样有效:

<script>
$(function () {
    var filesMap = {};
    <?php foreach ($folders as $f) { ?>
    filesMap['files_' + <?=$f['request_id']?>] = 0;
    <?php } ?>
    …
    $('.request-files').on('click', 'a.delete', function (e) {
       e.preventDefault();
       var $link = $(this);
       var $id = $link.data('request-id');
       console.log(filesMap['files_' + $id]); 
    });
});
</script>

我不熟悉PHP,因此request_id部分中的字符串连接可能不同,但逻辑仍然存在。