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

document.getElementById working for one form element but not another

本文关键字:表单 适用于 元素 不适用 另一个 getElementById document 一个      更新时间:2023-09-26

我有一个网页,它采用一个 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 个字符并且必须用getElementById()调用填充control2时,它将 control2 设置为未定义,然后是 control2。Focus() 调用抛出错误。

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

getElementById是一个

函数,而不是一个数组。

使用()而不是[]

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

更正的代码:

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

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

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

因此,第二个if块中的代码应如下所示:

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

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

应该是

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