以动态方式访问动态创建的变量

约书亚

这可能需要一些解释,所以请耐心等待。

我正在尝试创建X个表,每个表的长度(列)各不相同Y,每个表有4行,X和Y由用户确定。我已经解决了这一部分。

问题在于每个表中的每个单元格都必须包含自己的文本框,该文本框将包含从数据库派生的数字。如果用户在文本框中更改数字,则更改必须反映在数据库中。

鉴于表的数量和表的长度是未知的,我无法提前设置文本框的名称,因此必须动态设置。

我遇到了以下代码:

var pageNumber = 1;
eval("var text" + pageNumber + "=123;");
alert(text1);
//alert shows '123'

我相信可以修改每个文本框的名称(修改后)。我遇到的麻烦是如何访问这个新文本框,因为我不知道它的名字(在创建表之后)?

我计划使用3d数组保存要在表中每个单元格中显示的数字,并计划使用此数组命名单元格。

例如,数组可以是array [i] [j] [k],并假设i = 1,j = 2,k = 3,它将保存数字8。动态创建的文本框名称类似于:textBox123

我如何将数组(包含8个)中的单元格与该新文本框相关联,然后在我不知道其名称提前时检索并存储一个新值?

我的想法,我该如何写

 <input type="text" name="textBox123" value=array[i][j][k]> 

到HTML?

再说一次,也许我是在考虑这个问题,并且有一种更好的方法。如果是这样,请告诉我。

关口

HTML:

<div id="tables"></div>

JavaScript:

var tables = [
        // Table #1
        [
            [111, 112, 113], // Row #1
            [121, 122, 123]  // Row #2
        ],
        // Table #2
        [
            [211, 212, 213, 214], // Row #1
            [221, 222, 223, 224], // Row #2
            [231, 232, 233, 234]  // Row #3
        ],
        // Table #3 (empty!)
        []
    ],
    nr, nc, i, j, k,
    name, value, textBox, cell, row, table,
    $tables = $("#tables");

for (i = 0; i < tables.length; ++i) {
    nr = tables[i].length;
    nc = nr > 0 ? tables[i][0].length : 0;
    table = "<table>";
    for (j = 0; j < nr; ++j) {
        row = "<tr>";
        for (k = 0; k < nc; ++k) {
            name = "textBox" + (i + 1) + (j + 1) + (k + 1);
            value = tables[i][j][k];
            textBox = "<input type='text' name='" + name + "' value='" + value + "'>";
            cell = "<td>" + textBox + "</td>";
            row += cell;
        }
        row += "</tr>\n";
        table += row;
    }
    table += "</table>\n";
    $tables.append(table);
}

参见jsfiddle第三个空表将作为一个空table标记插入,但这不是必需的。

我要提到的是,由于您需要将这些表连接到数据库,因此一种优雅的解决方案是使用客户端MVC框架,例如Backbone.js在这里,您可以找到一本不错的入门书。视图可以使用类似上面的一个代码render表。tables数组可以存储在Collection中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章