【问题标题】:Set always Focus on Textbox (ASP.NET, Updatepanel)设置始终关注文本框(ASP.NET、Updatepanel)
【发布时间】:2010-10-04 12:06:43
【问题描述】:

嘿, 在我开始写我的问题之前,我会原谅我的英语不好,希望你能理解我。

我在 ASP.NET Web 应用程序中有一个 AJAX 更新面板。在这个更新面板中是一个 动态搜索结果的文本框。当我开始在文本框中写入时,结果就像谷歌建议的那样。

现在,焦点必须始终在文本框(输入字段)上,现在测量用户点击的位置。

当前 ASP.NET 更新面板会在用户开始键入几秒钟后刷新。

感谢您的帮助:-)

【问题讨论】:

  • 我不太确定这个答案,但是当您将焦点放在 Page_load 事件中的控件上时会发生什么?
  • 无论用户点击哪里,焦点都必须始终在文本框中。

标签: javascript asp.net updatepanel


【解决方案1】:

updatepanel 完成更新 html dom 时发生事件

Sys.WebForms.PageRequestManager.getInstance().add_endRequest

试试这个

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

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

【讨论】:

  • 这对我有用。我最终将此代码包装在我的脚本块中的 pageLoad 函数中。
【解决方案2】:

这很有趣,但这里有一个可能的解决方案。这个想法是:如果用户离开文本框(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();
    }
}

【讨论】:

  • 您好,感谢帮助,问题是整个文本都被选中了。
  • 您使用的是 sender.value = sender.value; 吗?它应该防止整个文本选择。而且我已经测试过我的解决方案与 chrome 有问题。
  • 是的。 chrome 的问题不适合我。我必须只支持 IE7 和 IE8。这里是我的文本框中的快捷方式。我希望它有所帮助:
【解决方案3】:

一个简单的 SetFocus f.e.在 Page.Load 中应该可以工作:

ScriptManager1.SetFocus (TextBox1.ClientID)

更新:根据this post以下作品...

将此脚本添加到页面头部的脚本块中:

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)

【讨论】:

  • 嘿蒂姆,现在问题出在我编辑文本时,光标会跳到末尾。用户必须能够编辑文本。示例:我输入了 stackowwerflow 并将其更正为 stackoverflow。在您采样时,光标总是跳到文本的末尾。
  • 蒂姆,是什么改变了这个效果? ScriptManager sm = ScriptManager.GetCurrent(this); sm.SetFocus(myTextBox)
  • @Patrik:我的更改与您在编辑时保持光标位置的问题无关。抱歉,目前我没有时间深入研究这个问题。
猜你喜欢
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多