1

我希望根据包含单击的按钮的表格行来命名一个数组。

我因此得到表格行:

var rowNum = $(this).parent().parent().index();

现在,我希望命名数组并访问它。

var arrayName = 'arrTR' + rowNum;
window[arrayName] = new Array();
window[arrayName]["First"] = "Bob";
window[arrayName]["Last"] = "Roberts";
window[arrayName]["email"] = "me@there.com";

//The array should be accessible as arrTR__
alert(arrTR1["Last"]);

警报不起作用,所以我做错了什么。

我应该如何重构代码以允许我更新和访问数组?

jsFiddle

4

3 回答 3

1

您对动态命名变量所做的工作本质上是创建一个由这些变量组成的数组(每个变量一个rowNum),但为每个数组元素提供其自己的单独命名变量。

有一个更好的方法来做到这一点。与其生成一系列动态命名的变量,不如创建一个数组或一个对象。然后为您要生成的每个动态命名变量添加一个元素或属性。

您的测试代码可能如下所示:

var arrTR = [];

var rowNum = 1;

arrTR[rowNum] = {
    First: 'Bob',
    Last: 'Roberts',
    email: 'me@there.com'
};

alert( arrTR[1].Last );

或者,您可以$.data按照 Johan 的回答中提到的那样做一些事情。但是,如果您确实使用纯 JavaScript 代码,请使用此处所述的单个数组,而不是多个动态命名的变量。

这样做有几个原因。代码更干净更容易看懂,在有大量条目的情况下可能会更快,而且完全不用污染全局命名空间。您可以var arrTR = [];在对使用它的其他代码可见的任何范围内定义 。

数组和对象是用来跟踪事物列表的,所以使用它们。

于 2013-09-14T20:00:16.043 回答
1

这样的事情怎么样?

$('.getinfo').click(function() {

    var result = $('table tr:gt(0)').map(function(k, v){
            return { 
                firstName: $(v).find('.fname').val(),
                lastName: $(v).find('.lname').val(),
                email: $(v).find('.email').val(),
            }
        }).get();

    //update to show how you use the jQuery cache:

    //1. set the value (using the body tag in this example):
    $('body').data({ result: result });

    //2. fetch it somewhere else:
    var res = $('body').data('result');

});

不知道你想如何处理第一行。在这种情况下我跳过。您可以通过 访问每一行result[index]

您可能已经注意到,这会保存每次点击的所有行。如果您只想使用单击的行,请使用this指针。

http://jsfiddle.net/nwW4h/4/

于 2013-09-13T21:59:42.540 回答
1

您的代码没有任何问题,唯一有错误的地方是警报,因为它没有在第一次单击按钮上定义

看到这个小提琴有一点更新

if(rowNum === 1)
    alert(arrTR1["Last"]);
else if(rowNum === 2)
    alert(arrTR2["Last"]);

小提琴

于 2013-09-13T22:10:04.180 回答