document.getElementById适用于一个表单元素但不适用于另一个表单元素

时间:2012-06-01 14:30:08

标签: javascript asp.net

我有一个网页,它包含一个10位数的代码,分为两个文本框,第一个文本框中有4个字符,第二个文本框中有6个字符。

我一直在尝试实现一些javascript,以便当用户在第一个文本框中输入第四个字符时,光标会跳转到第二个文本框。

页面布局如下:

<asp:TextBox ID="txtCode1" onkeyup="Next()" runat="server" Width="45"    MaxLength="4"/>
<asp:TextBox ID="txtCode2" runat="server" Width="70" MaxLength="6"/>

我正在使用以下Javascript:

function Next() 
{
    var control1 = document.getElementById('<%= txtCode1.ClientID %>');
    var control2;

    if (control1.value.length == 3) 
    {
         control2 = document.getElementById['<%= txtCode2.ClientID %>'];
         control2.Focus();
    }
}

我的问题是该功能无法识别第二个文本框。如果我单步执行Javascript没有问题就能找到txtCode1并获得长度,但当长度达到4个字符并且必须使用control2调用填充getElementById()时它会设置control2如未定义,然后control2.Focus()调用抛出错误。

我不明白获取control1和control2的代码是如何相同但这不起作用,我缺少什么?

3 个答案:

答案 0 :(得分:5)

getElementById是一个函数,而不是数组。

使用()而非[]

此外,在JavaScript中,DOM元素使用focus方法,而不是Focus方法。

更正后的代码:

control2 = document.getElementById('<%= txtCode2.ClientID %>');
control2.focus();

答案 1 :(得分:4)

在第二个调用中,您使用的是方括号而不是括号。在第一次调用中,您正确使用了它。

此外,正如dontGoPlastic在下面的评论中指出的那样,您应该使用.focus()(小写)代替.Focus()

因此,第二个if块中的代码应该变为:

control2 = document.getElementById('<%= txtCode2.ClientID %>');
control2.focus();

答案 2 :(得分:1)

control2 = document.getElementById['<%= txtCode2.ClientID %>'];

应该是

control2 = document.getElementById('<%= txtCode2.ClientID %>');
                                  ^ paren                    ^ paren