Установить всегда Фокус на текстовое поле (ASP.NET, Updatepanel) - PullRequest
2 голосов
/ 04 октября 2010

Эй, Прежде чем я начну писать свою проблему, я извиняюсь за мой плохой английский, и я надеюсь, что вы меня понимаете.

У меня в веб-приложении ASP.NET есть панель обновления AJAX. В этом Updatepanel является Текстовое поле для результатов динамического поиска. Когда я начинаю писать в текстовом поле, результаты появляются так, как предлагает Google.

Теперь фокус должен быть всегда на текстовом поле (поле ввода), теперь метра, на которую нажимает пользователь.

В настоящее время панель обновления ASP.NET обновляется через несколько секунд, когда пользователь начинает печатать.

Спасибо за помощь: -)

Ответы [ 3 ]

3 голосов
/ 04 октября 2010

происходит событие, когда панель обновления заканчивает обновление html dom

Sys.WebForms.PageRequestManager.getInstance().add_endRequest

попробуйте это

function EndRequestHandler() {  
//get focus on the textbox
myTextbox.focus(); }

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
1 голос
/ 04 октября 2010

Это довольно забавно, но вот возможное решение. Идея такова: если пользователь выходит из текстового поля (onblur), то возвращает его обратно в текстовое поле (функция focusOnTxt):

<head runat="server">
    <title></title>
    <script type="text/javascript">
        function focusOnTxt(sender) {
            sender.focus(); 
            sender.value = sender.value;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="upnl" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="txt" runat="server"
          onblur="focusOnTxt(this)"></asp:TextBox>
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

А на Page_Load:

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        txt.Focus();
    }
}
0 голосов
/ 04 октября 2010

Простой SetFocus f.e. На странице. Загрузка должна работать:

ScriptManager1.SetFocus (TextBox1.ClientID)

ОБНОВЛЕНИЕ : согласно этому посту следующие работы ...

Добавьте этот скрипт в блок скриптов в заголовке вашей страницы:

function SetEnd(TB){
    if (TB.createTextRange){
        var FieldRange = TB.createTextRange();
        FieldRange.moveStart('character', TB.value.length);
        FieldRange.collapse();
        FieldRange.select();
    }
}

Затем добавьте событие onfocus в текстовое поле:

onfocus="SetEnd(this)"

В вашем обработчике Page.Load или TextChanged-Event вашего кодекса добавьте стандартный вызов SetFocus:

ScriptManager sm = ScriptManager.GetCurrent(this);
sm.SetFocus(myTextBox)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...