JavaScript .focus () не будет работать с вкладкой - PullRequest
1 голос
/ 10 июня 2011

По какой-то причине ни одно из моих событий setfocus () не работало на стороне сервера моего веб-приложения, поэтому я создал функцию javascript setfocus, которая настроена на срабатывание события onload тега body.

<body onload="SetFocus()">

Пользователь щелкает переключатель, чтобы включить раскрывающийся список.они выбирают из выпадающего списка, который включает текстовое поле.Когда они сканируют штрих-код в текстовое поле, он автоматически выходит из поля, поэтому запускается событие onchange для вызова некоторого кода на стороне сервера, который, если успешная вставка SQL завершена, вставит новую строку в сетку, и это должноустановить фокус автоматически обратно в текстовое поле с помощью JavaScript.Как только у этого объекта сетки больше заголовка и строки данных, я отключаю раскрывающийся список и список переключателей, поэтому, если вы посмотрите на 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 ]

1 голос
/ 15 июня 2011

Странно, что вы можете щелкнуть по полю, и это работает, но вкладка не работает. Попробуйте добавить tabIndexes к входам на вашей странице.

0 голосов
/ 14 июня 2011

Попробуйте преобразовать свой JavaScript в квадратную скобку.Например: document.forms[0].Txt_MatBC_All.focus();

0 голосов
/ 11 июня 2011

Идентификаторы вашего текстового поля меняются, когда asp.net отображает страницу. Так что попробуйте это, чтобы получить идентификатор динамически и посмотреть, работает ли он.

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

Таким же образом вы должны использовать ClientID на каждом getElementById , который вы используете.

кстати, на каждой строке вы фокусируете один и тот же текстовый элемент управления ( Txt_MatBC_All ). Если это так, зачем вы все это делаете, если, просто используйте одну строку.

  • совет 1 : вы можете увидеть, нашел ли ваш getElementById элемент управления, сделав временным вызовом оповещение, например alert(document.getElementById("<%=Txt_MatBC_All.ClientID%>"));
  • tip 2 : Щелкните правой кнопкой мыши по своему браузеру и посмотрите исходный код своей страницы, чтобы узнать, какие идентификаторы используются вашим контролем, чтобы узнать, действительно ли вы правы и то же самое с используемым JavaScript.
...