updatepanel执行.cs里的方法后焦点消失

lorinzhang 2011-01-15 02:23:44
页面的updatepanel里面有两个文本框,
第一个文本框有个TextChanged方法
现在的问题是,当用户填写完第一个文本框后接着将光标定位到第二个文本框准备填写,
但此时的光标就是消失,也就是怎么找回焦点
说的够清楚的了,这个问题已经很长时间了俺也没弄好,用的时候虽然可以用,
但用户要骂的。希望有解决过的给点指点,多谢了
...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在页面上加一个隐藏域,name="lastFoucus" id="lastFoucus"


$(document).ready(function(){
$("input:text").each(function(){
$(this).blur(function(){
$("#lastFoucus").val($(this).attr("id"));
});
});
});


protected void TextBox1_TextChanged(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(Request.Form["lastFoucus"]))
ScriptManager1.SetFocus(Request.Form["lastFoucus"]);
}

不知道行不行
lorinzhang 2011-01-15
  • 打赏
  • 举报
回复

如图
lorinzhang 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 koukoujiayi 的回复:]
引用 7 楼 zlj002 的回复:
先说这个思路哈
我开始也这么想的,但这个做法是错误的,
假如用户点的不是同一行的第二个文本框呢,
而是填完一行的第一个文本框紧接着填写第二行的第一个文本框呢,
应该是无论用户将焦点定位到哪个控件都应该将焦点停到到目的控件

GridView常规的是编辑一行哦!
你是用GridView同时编辑n行?
[/Quote]



是的,比如有一个单据里面有有个列表,有这么几个列

产品名 数量 合格数量 合格数量 合格单价 让步价格 总价
产品1 20 文本框一 文本框二 框三
产品2 30 文本框一 文本框二 框四

这里假如用户填写产品的时候要验证产品存在吗?如果将一存在的价格度出来,
总之就这么个意思把





koukoujiayi 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zlj002 的回复:]
先说这个思路哈
我开始也这么想的,但这个做法是错误的,
假如用户点的不是同一行的第二个文本框呢,
而是填完一行的第一个文本框紧接着填写第二行的第一个文本框呢,
应该是无论用户将焦点定位到哪个控件都应该将焦点停到到目的控件
[/Quote]
GridView常规的是编辑一行哦!
你是用GridView同时编辑n行?
lorinzhang 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 koukoujiayi 的回复:]
也可以的,如:

C# code
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox tx1 = (TextBox)sender;
int index = ((GridViewRow)tx1.NamingContainer).RowIndex;……
[/Quote]
先说这个思路哈
我开始也这么想的,但这个做法是错误的,
假如用户点的不是同一行的第二个文本框呢,
而是填完一行的第一个文本框紧接着填写第二行的第一个文本框呢,
应该是无论用户将焦点定位到哪个控件都应该将焦点停到到目的控件
lorinzhang 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "test", "setTimeout(\"document.getElementById(TextBox1).focus();\", 1);", true);
http://topic.csdn.net/u/20081228/20/9a642a39-37……
[/Quote]
如梦,你好,上面的连接sp1234那位大哥写的类似控件做法很好,
只是也不管用,用为防止漏写或写错地方,复制他写的,也不行,
他在.cs的方法里也获得了用户点的那个控件的id,无论用户点哪个都可以获得,
但就是设置焦点不管用。。。。。。
koukoujiayi 2011-01-15
  • 打赏
  • 举报
回复
也可以的,如:
    protected void TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox tx1 = (TextBox)sender;
int index = ((GridViewRow)tx1.NamingContainer).RowIndex;//获取编辑所在的行号
TextBox tx2 = (TextBox)GridView1.Rows[index].Cells[2].FindControl("TextBox2");//Cells[2]是TextBox2所在的列号
ScriptManager1.SetFocus(tx2.ClientID);
}
wuyq11 2011-01-15
  • 打赏
  • 举报
回复
ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "test", "setTimeout(\"document.getElementById(TextBox1).focus();\", 1);", true);
http://topic.csdn.net/u/20081228/20/9a642a39-3799-49ca-bf12-d8ee627e874f.html
lorinzhang 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 koukoujiayi 的回复:]
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
ScriptManager1.SetFocus(TextBox2);
}
[/Quote]
您好,这样试过了,不好使,还有就是id是不确定的,
本框是放在gridview的模板列里的呢
填写某单据的时候经常用到,郁闷,最好弄有个自定义控件一样的东西就好了
koukoujiayi 2011-01-15
  • 打赏
  • 举报
回复
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
ScriptManager1.SetFocus(TextBox2);
}

62,052

社区成员

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

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

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

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