在我的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 来获取它们,但它不起作用。
有什么想法吗?
答案 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
部分中的字符串连接可能不同,但逻辑仍然存在。