javascript .focus()不适用于tab

时间:2011-06-10 19:48:08

标签: asp.net vb.net javascript-events textbox focus

由于某些原因,我的setfocus()事件都没有在我的web ap的服务器端工作,所以我创建了一个javascript函数setfocus,它被设置为触发body标签的onload事件。

<body onload="SetFocus()">

用户将单击一个单选按钮,启用下拉菜单。他们从下拉菜单中选择启用文本框。当他们将条形码扫描到文本框中时,它将自动跳出字段,因此触发onchange事件以调用一些服务器端代码,如果成功完成SQL插入,则会向gridview插入一个新行,它应该通过javascript自动将焦点设置回文本框。一旦该gridview对象具有多个标题和一行数据,我就会禁用下拉列表和单选按钮列表,所以如果你查看下面的javascript,我就不能再将它们用作if语句中的标准了。

使用Javascript:

 var MatAllRB = document.getElementById("HF_RB_MatAll").value;
 var MatAllCL = document.getElementById("DD_SelectCL_All").value;
 var MatAll = document.getElementById("Txt_MatBC_All");
 var MatAllPrompt = document.getElementById("HF_AllPrompt").value;
 var count = $("#GV_Scan_All tr").children().length;

这非常有效:

else if (ActiveTab == "cont-3" && MatAllRB != "" && MatAllCL != "")
    {   alert("went into setfocus");
        document.getElementById("Txt_MatBC_All").focus();
        alert("made it through setfocus");
    }

这仅适用于您实际单击该字段,该选项卡不起作用。它什么都不做

else if (ActiveTab == "cont-3" && count == 9)
    {   alert("went into setfocus");
        document.getElementById("Txt_MatBC_All").focus();
        alert("made it through setfocus");
    }

这与上面的内容相同

else if (ActiveTab == "cont-3" && (MatAllPrompt == "RP" || MatAllPrompt == "P03"))
    {   alert("went into setfocus");
        document.getElementById("Txt_MatBC_All").focus();
        alert("made it through setfocus");
    }

奇怪的是,我在这里所有这些警报都正确显示,它从不设置焦点。我对这个东西还很新,所以也许我错过了一些东西,但是我无法弄清楚为什么focus()可以用来点击而不是标签。任何帮助将不胜感激。

这是HTML

    <asp:RadioButtonList runat="server" ID="RB_Mat_All" AutoPostBack="true" RepeatColumns="4" OnSelectedIndexChanged="RB_Mat_All_OnSelectedIndexChange">
    <asp:ListItem Text="NC" value="NC"></asp:ListItem>
    <asp:ListItem Text="DA" value="DA"></asp:ListItem>
    <asp:ListItem Text="GW" value="GW"></asp:ListItem>
    <asp:ListItem Text="PC" value="PC"></asp:ListItem>
</asp:RadioButtonList>
<asp:HiddenField runat="server" ID="HF_RB_MatAll"></asp:HiddenField >
<br />
<asp:DropDownList runat="server" ID="DD_SelectCL_All" AutoPostBack="true" OnSelectedIndexChanged="DD_SelectCL_All_OnSelectedIndexChange">
    <asp:ListItem Value="" Text="Select..."></asp:ListItem>
    <asp:ListItem value="53" text="05"></asp:ListItem>
    <asp:ListItem value="54" text="06"></asp:ListItem>
    <asp:ListItem value="55" text="07"></asp:ListItem>
    <asp:ListItem value="57" text="08"></asp:ListItem>
    <asp:ListItem value="58" text="09"></asp:ListItem>
</asp:DropDownList>
<asp:label runat="server" ID="Lbl_All_Prompt" CssClass="Form" Text=""></asp:label>
<asp:HiddenField runat="server" ID="HF_AllPrompt"></asp:HiddenField >
<asp:TextBox runat="server" ID="Txt_MatBC_All" Cssclass="Form" Text="" AutoPostBack="true" OnTextChanged="Txt_MatBC_All_TextChanged"></asp:TextBox>
<asp:GridView runat="server" ID="GV_Scan_All" CssClass="Form_Feedback"></asp:GridView>

当我查看来源时,文本框如下所示:

<input name="Txt_MatBC_All" type="text" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;Txt_MatBC_All\&#39;,\&#39;\&#39;)&#39;, 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="Txt_MatBC_All" class="Form" />

3 个答案:

答案 0 :(得分:1)

奇怪的是,您可以点击该字段并且它可以正常工作,但是标签关闭则不然。尝试将tabIndex添加到页面上的输入中。

答案 1 :(得分:0)

您的文本框的ID,在asp.net呈现页面时更改。所以试试这个动态获取id并查看它是否有效。

document.getElementById("<%=Txt_MatBC_All.ClientID%>").focus();

您必须在所使用的每个 getElementById 上使用ClientID

顺便说一下,在每一行上你都会聚焦同一个文本控件( Txt_MatBC_All )。如果是这种情况,为什么要做到这一切,只需使用一行。

  • 提示1 :您可以通过make teamporary查看alert(document.getElementById("<%=Txt_MatBC_All.ClientID%>"));
  • 之类的提醒来查看您的getElementById是否找到了该控件
  • 提示2 :右键点击您的浏览器,查看您网页的源代码,了解您的控件所使用的内容,看看您是否真的是正确的,并且与您使用的javascript相同

答案 2 :(得分:0)

尝试将JavaScript转换为方括号表示法。例如:document.forms[0].Txt_MatBC_All.focus();