c#web中,textbox文本框跳转问题?

kukukey 2008-12-30 12:18:42
回车键跳转问题!现应用了一段JS代码
 function   MyForm.onkeydown()
{
with(window.event)if(keyCode==13)keyCode=9
}

发现有个文本框我放入了onblur="__doPostBack('btnCountry','')"
这样我在那个文本框按回车后,事件是刷新了,但是焦点失去了。
怎样做,才能先执行了那个事件成功后,跳转到下个文本框呢
...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kukukey 2008-12-30
  • 打赏
  • 举报
回复
求一段代码。。。。。
c# web的。textbox中的onkeydown事件。
或者是后台
页面加载时给textbox.Attributes.Add("......")
  • 打赏
  • 举报
回复
嗯,还是加上一个判断比较好:
        if (this.ActiveElementID1.ActiveClientID != string.Empty)
this.Page.SetFocus(this.ActiveElementID1.ActiveClientID); //加上这一句OK了
  • 打赏
  • 举报
回复
一个TextBox可以在其AutoPostback时在TextChanged中处理相应的功能,这比在onblur时去触发一个Button要更加精炼。

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>

你可以在vs开发环境的设计窗口选中TextBox,并在属性窗口上用鼠标双击AutoPostBack设置为true,然后在事件窗口上双击TextChanged来创建事件。不要手写“__doPostback....”。你的TextBox在设计时不确定放在哪里因此它生成的html脚本中的控件客户端id是随时可变的(会加上从顶层往下的所有层次的id在前边),而且生成的代码逻辑也是可变的(例如在asp.net ajax下就会将“__doPostback(....)”放到一个setTimeout之内这有它的道理),而手写这个脚本则丢掉了asp.net的比较周全的东西。



关于设置焦点的问题,我写了一个帖子《示例:如何处理UpdatePanel中控件Autopostback时的焦点》,其中,我首先贴了一个很简短的用户控件:ActiveElementID.ascx

在你的网站下放入那个ascx文件,然后,你就可以用下面这个aspx来测试:

<%@ Page Language="C#" %>

<script runat="server">
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
this.TextBox4.Text = DateTime.Now.ToLongTimeString();
this.Page.SetFocus(this.ActiveElementID1.ActiveClientID); //加上这一句OK了
}
</script>

<%@ Register Src="ActiveElementID.ascx" TagName="ActiveElementID" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server" onkeydown="with(window.event)if(keyCode==13)keyCode=9">
<uc1:ActiveElementID ID="ActiveElementID1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" OnTextChanged="TextBox1_TextChanged"></asp:TextBox><br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br />
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox><br />
</form>
</body>
</html>


如果“想当然地编程”,那么你可能在TextBox1_TextChanged中的第二句写成

TextBox2.Focus()

但是,开发时并不总是肯定TextBox2在TextBox1的上面、右面、下面、中间还隔着其它可获得焦点的控件,并且你可以测试上面aspx的时候你可以试试用鼠标直接选择TextBox4之类的其它控件。可以看出,编程时你应该去将焦点设置到AutoPostback时原本获得焦点的控件上,但这个控件到底是哪一个控件则应该是不确定的。
lsn517471114 2008-12-30
  • 打赏
  • 举报
回复
.NET联盟会馆 QQ群号:77329563 招聘中.....
分享大哥 2008-12-30
  • 打赏
  • 举报
回复
利用ajax来实现
kukukey 2008-12-30
  • 打赏
  • 举报
回复
刚看了下在Ajax Control Toolkit里有个ValidatorCallout控件,研究下
kukukey 2008-12-30
  • 打赏
  • 举报
回复
我试用了3楼好人的方法,很好用。可也发现了个问题。我引入了UpdatePanel将那几个文本框放在里面。
回车之后发现,页面是不抖了。可文本框提交了一个错误的ID,另一个文本框得不到这个ID对应的NAME
,就没有了弹出错误对话框的提示了。
还有回车是按2次才跳离那个文本框的

62,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧