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

Retrieve value of a Jquery variable name containing a variable in itself

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

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

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

在我的 html 我有一个 link 喜欢 :

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

data-request-id 参数给我一个数字,你在我的变量名中得到的那些在上面。在我的示例中,它是 data-request-id="2" : files_2.

接下来,我有一个 Jquery 函数可以从 links 中捕获数据值:

$('.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 获取它们,但它不起作用。

有什么想法吗?

如果您在全局范围内定义了变量,它们将附加到 window 对象。所以你应该能够通过在 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> - 它的工作方式与 window:

非常相似
<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 部分的字符串连接可能不同,但逻辑不变。