JavaScript数组索引是一个变量

3
我正在开发一个动态生成Jquery标签页的网站,每个标签页都有一个ID。
为了我的脚本需要知道用户点击标签页的次数。
为了记录点击次数,我想做一个像这样的数组:
var i  = new Array(my_tab_id);
(...)
i[my_tab_id] = 0;

我的_tab_id会根据我们所在的选项卡动态更改。不幸的是,似乎my_tab_id的值没有转换为数组。我没有i [5] = 0,i [6] = 0等,而是i [my_tab_id],这并没有比一个简单的变量更有帮助。

有什么建议吗?谢谢!


你展示的是有效的代码。如果它没有运行,我们需要更多关于 my_tab_id 是如何以及何时更改的上下文信息。 - VoteyDisciple
4个回答

7
在这种情况下,您不应该使用数组,而应该使用一个对象,您可以像处理哈希表一样处理它。
var o = {};
var id = 'x';
o[id] = 1;
alert(o[id]);

1

这应该允许您使用jQuery中的.data()函数在每次单击选项卡时将点击计数存储到每个选项卡上。

$('#example').bind('tabsselect', function(event, ui) {
    var count = parseInt(ui.tab.data("clickCount"));
    if (isNaN(count)) count = 0;
    count++;
    ui.tab.data("clickCount", count);
});

0
你确定在调用 i[my_tab_id] = 0; 时,my_tab_id 是一个整数吗?


0

我想我理解了你的问题。
你是说变量 i 只有一个元素。这是因为每次打开新标签页时,var i 都会被重新实例化。我猜测每个标签页都是一个新页面,或者至少是 var i 的新上下文。
如果你想在不同页面之间保留对象实例(比如数组),可以看一下 jStorage,它允许你在浏览器本地保存数据,并且更容易在页面加载之间维护上下文。
如果所有标签页都在同一页上,那么解决方案就更简单了,你需要将数组保存在页面的全局变量中。


是的,这正是让我发疯的原因。每当用户打开一个新标签时,它就会重置存储点击数的变量。我尝试将其设置为全局变量,但无法声明它,因为我需要在函数中拥有我的_tab_id。我一定会尝试jStorage。 - user347284
如果更改选项卡不会生成页面刷新,则可以将变量i声明为全局变量,在函数外部使用它仍然可以在函数内部使用。但是,如果选项卡生成页面刷新,则需要使用类似jStorage的东西来在页面之间保持上下文。 - pauloya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接