输入焦点的问题,已经触发 onfocus(),怎么光标不在上面? ajax是异步执行的,就是说调用ajax的时候,其他的js代码还会继续执行,有可能是ajax还没返回,就执行了onfocus,返回后执行其他代码,导致失去焦点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢楼上的回复,我是在 AJAX 返回的结果中,带出了脚本 focus(),为了防止出现同步问题,专门使用了 setTimeout 函数,延迟了很多秒才执行这个 focus(),就是为了防止出现 AJAX 对它的干扰,但这样都不行。 代码如下:<%@ Page Language="C#" AutoEventWireup="true" Title="Untitled Page" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head id="Head1" runat="server" /><title></title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body> <center> <form id="form1" runat="server" ><asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" /><asp:updatepanel ID="UpdateMainPanel" runat="server" UpdateMode="conditional"> <ContentTemplate> <asp:TextBox runat="server" ID="TextBox1" ></asp:TextBox><br /> <asp:TextBox runat="server" ID="tbDebug" ></asp:TextBox><br /> <asp:button runat="server" id="btn" text="测试焦点" OnClick="btn_Click" /> <br /> 点击空白区域,再点击测试焦点按钮,失去焦点的几率提高很多。 </ContentTemplate></asp:updatepanel></form></center><script runat="server" type="text/C#"> protected void Page_Load(object sender, EventArgs e) { tbDebug.Text = DateTime.Now.ToString(); // tbDebug.Attributes.Add("onfocus", "javascript:alert('on focus');"); //焦点设置上后弹出提示窗口 } protected void btn_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(1000); //如果不延迟,基本上都能设置焦点成功 ScriptManager.RegisterStartupScript(this, this.GetType(), "OOKK" , "setTimeout(\"document.getElementById('" + tbDebug.ClientID + "').focus();\",500);" , true); tbDebug.Text = DateTime.Now.ToString(); }</script></body></html> 试了一下,如果时间设长点肯定能获得焦点,5000以上吧,聚焦的脚本是肯定会执行的,导致最终没有聚焦的原因估计是ajax还没执行完就focus了,后来又执行了其他脚本,使焦点丢失这个控件的工作原理不懂啊,代码倒是开源,但自己改估计很费劲,如果想很好的实现页面的一些特效还是自己写纯脆的js代码吧,那样更好控制,也好找原因,感觉这套ajax控件很花哨但不实用 如果 AJAX 没有执行完就设置了焦点,按说也不会没有聚焦成功啊,而是聚焦后又丢失焦点,但看效果,没有一次是聚焦后丢失焦点。如果延迟2000,仔细看按钮,能看出来在2秒时,按钮有些小变化,好像鼓起来了,由此可见这时候焦点确实设置了,好像是设置到了页面的其它地方,修改了代码更清楚地看效果。这个 AJAX 控件还必须得用,整个框架都用了这个 AJAX,页面比较复杂,自己写 JS 要累死。<%@ Page Language="C#" AutoEventWireup="true" Title="Untitled Page" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head id="Head1" runat="server" /><title></title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body> <center> <form id="form1" runat="server" ><asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" /><asp:updatepanel ID="UpdateMainPanel" runat="server" UpdateMode="conditional"> <ContentTemplate> <asp:TextBox runat="server" ID="TextBox1" ></asp:TextBox><br /> <asp:TextBox runat="server" ID="tbDebug" ></asp:TextBox><br /> <asp:button runat="server" id="btn" text="测试焦点" OnClick="btn_Click" /> <br /> 点击空白区域,再点击测试焦点按钮,失去焦点的几率提高很多。 </ContentTemplate></asp:updatepanel></form></center><script runat="server" type="text/C#"> protected void Page_Load(object sender, EventArgs e) { tbDebug.Text = "Load:" + DateTime.Now.ToString(); tbDebug.Attributes.Add("onfocus", "document.getElementById('tbDebug').value='focus:" + DateTime.Now.ToString() + "'"); //焦点设置上后弹出提示窗口 } protected void btn_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(1000); //如果不延迟,基本上都能设置焦点成功 ScriptManager.RegisterStartupScript(this, this.GetType(), "OOKK" , "setTimeout(\"document.getElementById('" + tbDebug.ClientID + "').focus();\",2000);" , true); tbDebug.Text = "Clickd:" + DateTime.Now.ToString(); }</script></body></html> 找到办法了,不用 JS 的设置焦点,而调用 AJAX 类库中的设置焦点函数:ScriptManager1.SetFocus(tbDebug); 请教一个关于iframe src 问题,谢谢 请教JS滚动在IE6浏览器下不兼容,其他浏览器都能支持。 jquery选择器的问题 如何实现击按钮关闭图片? 【请教】关于下载文件的保存 如何利用javascript实现如下的判断?? 请问如何用代码模拟实现<select>(combox)的下拉? 关于这个xml如何用javascript增删子节点的问题 我设置了div的背景色,但IE5却不立刻刷新,怎么解决? 如何用javascript动态的生成多个不同的表单?帮帮忙! 北京哪里学习网站美工好点?大家帮忙推荐几个 DOM中 fileUpload 的属性问题
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head id="Head1" runat="server" />
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body> <center>
<form id="form1" runat="server" >
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" /><asp:updatepanel ID="UpdateMainPanel" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:TextBox runat="server" ID="TextBox1" ></asp:TextBox><br />
<asp:TextBox runat="server" ID="tbDebug" ></asp:TextBox><br />
<asp:button runat="server" id="btn" text="测试焦点" OnClick="btn_Click" />
<br />
点击空白区域,再点击测试焦点按钮,失去焦点的几率提高很多。
</ContentTemplate>
</asp:updatepanel>
</form>
</center><script runat="server" type="text/C#">
protected void Page_Load(object sender, EventArgs e)
{
tbDebug.Text = DateTime.Now.ToString();
// tbDebug.Attributes.Add("onfocus", "javascript:alert('on focus');"); //焦点设置上后弹出提示窗口
}
protected void btn_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(1000); //如果不延迟,基本上都能设置焦点成功 ScriptManager.RegisterStartupScript(this, this.GetType(), "OOKK"
, "setTimeout(\"document.getElementById('" + tbDebug.ClientID + "').focus();\",500);" , true);
tbDebug.Text = DateTime.Now.ToString();
}
</script></body>
</html>
聚焦的脚本是肯定会执行的,导致最终没有聚焦的原因估计是ajax还没执行完就focus了,后来又执行了其他脚本,使焦点丢失
这个控件的工作原理不懂啊,代码倒是开源,但自己改估计很费劲,
如果想很好的实现页面的一些特效还是自己写纯脆的js代码吧,那样更好控制,也好找原因,感觉这套ajax控件很花哨但不实用
如果延迟2000,仔细看按钮,能看出来在2秒时,按钮有些小变化,好像鼓起来了,由此可见这时候焦点确实设置了,好像是设置到了页面的其它地方,修改了代码更清楚地看效果。这个 AJAX 控件还必须得用,整个框架都用了这个 AJAX,页面比较复杂,自己写 JS 要累死。
<%@ Page Language="C#" AutoEventWireup="true" Title="Untitled Page" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head id="Head1" runat="server" />
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body> <center>
<form id="form1" runat="server" >
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" /><asp:updatepanel ID="UpdateMainPanel" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:TextBox runat="server" ID="TextBox1" ></asp:TextBox><br />
<asp:TextBox runat="server" ID="tbDebug" ></asp:TextBox><br />
<asp:button runat="server" id="btn" text="测试焦点" OnClick="btn_Click" />
<br />
点击空白区域,再点击测试焦点按钮,失去焦点的几率提高很多。
</ContentTemplate>
</asp:updatepanel>
</form>
</center><script runat="server" type="text/C#">
protected void Page_Load(object sender, EventArgs e)
{
tbDebug.Text = "Load:" + DateTime.Now.ToString();
tbDebug.Attributes.Add("onfocus", "document.getElementById('tbDebug').value='focus:" + DateTime.Now.ToString() + "'"); //焦点设置上后弹出提示窗口
}
protected void btn_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(1000); //如果不延迟,基本上都能设置焦点成功 ScriptManager.RegisterStartupScript(this, this.GetType(), "OOKK"
, "setTimeout(\"document.getElementById('" + tbDebug.ClientID + "').focus();\",2000);" , true);
tbDebug.Text = "Clickd:" + DateTime.Now.ToString();
}
</script></body>
</html>
ScriptManager1.SetFocus(tbDebug);