Javascript - 无法设置属性'值'未定义的

时间:2014-04-22 11:48:24

标签: javascript properties undefined

我正在创建一个Javascript循环,可以放在程序中而不是编写

document.entry.(a_ to z_).value=(ax to zx);

到目前为止我的工作:

    function param() {
var counter2 = "ax bx cx dx fx gx hx ix jx kx lx mx nx ox px qx rx sx tx ux vx wx xx yx zx";
var alph2=counter2.split(" ");
for (var i=0;i<26;i++){
counter2[i]=1;
}
var letters2 = ".a_ .b_ .c_ .d_ .e_ .f_ .g_ .h_ .i_ .j_ .k_ .l_ .m_ .n_ .o_ .p_ .q_ .r_ .s_ .t_ .u_ .v_ .w_ .x_ .y_ .z_ ";
var let2=letters2.split(" ");

var entry = document.getElementById("entry");
document.entry[let2[i]].value=alph2[i];
}

但是,Chrome显然不喜欢倒数第二行,称其为cannot set value of undefined - 而“entry”是HTML中的一种形式。

我是Javascript初学者,非常感谢您的耐心: - )

1 个答案:

答案 0 :(得分:0)

counter2[i]=1;

该怎么办? counter是一个原始字符串,所以这根本没有效果。

entry.(a_ to z_).value

let2 = [".a_", ".b_", …]
entry[let2[i]].value

如果您使用括号表示法,则需要省略点符号属性访问中的点。它应该只是数组中的属性名称:

let2 = ["a_", "b_", …]

此外,您没有循环遍历let2数组,只是访问其中的i值 - 其中i的值仍为26。绕过for循环。


除此之外,您可以使用String.fromCharCode轻松生成连续的字母,您无需在字符串或数组中列出整个字母。更好:

var els = document.forms.entry.elements;
for (var i=0; i<26; i++) {
    var chr = String.fromCharCode(97 + i),
        alph = chr + "x",
        lett = chr + "_";
    if (els[lett] != null)
        els[lett].value = alph;
}