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

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

本文关键字:Jquery 变量名 变量 包含 检索      更新时间:2023-09-26

在我的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="2" : 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 获取它们,但它不起作用。

知道吗?

如果在全局 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部分的字符串连接可能不同,但逻辑仍然存在。