提问人:Patrick McDonald 提问时间:8/21/2009 最后编辑:Patrick McDonald 更新时间:7/12/2010 访问量:43816
ASP.NET TextBox LostFocus 事件
ASP.NET TextBox LostFocus event
问:
我需要在服务器端触发代码,以便在 TextBox 失去焦点时调用。
我知道存在 onblur 客户端事件,并且没有 LostFocus 事件,那么当我的 TextBox 失去焦点时,如何导致回发发生?
更新:
我找到了一个博客,它似乎为这个问题提供了一个相当不错的解决方案。它涉及向 TextBox 子类添加自定义事件,并注册一个客户端脚本,该脚本在 onblur JavaScript 客户端事件中调用服务器端事件。
以下是我在 VB 中的实现:
Public Class MyTextBox
Inherits TextBox
Implements IPostBackEventHandler
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
If Not Page.ClientScript.IsClientScriptBlockRegistered("OnBlurTextBoxEvent") Then
Page.ClientScript.RegisterStartupScript(MyBase.GetType, "OnBlurTextBoxEvent", GetScript, True)
Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')")
End If
End Sub
Public Delegate Sub OnBlurDelegate(ByVal sender As Object, ByVal e As EventArgs)
Public Event Blur As OnBlurDelegate
Protected Sub OnBlur()
RaiseEvent Blur(Me, EventArgs.Empty)
End Sub
Private Function GetScript() As String
Return "function OnBlurred(control, arg)" & vbCrLf & _
"{" & vbCrLf & _
" __doPostBack(control, arg);" & vbCrLf & _
"}"
End Function
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
OnBlur()
End Sub
End Class
答:
0赞
Noon Silk
8/21/2009
#1
嗯,这是一个相当奇怪的计划,但你可以在客户端使用'onblur'来调用'form.submit();“。
评论
0赞
Patrick McDonald
8/21/2009
我没有尝试这个,因为我需要知道什么控制失去了焦点
-1赞
rahul
8/21/2009
#2
为什么不使用 AutoPostBack 属性设置为 true 的 asp 文本框。
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
评论
1赞
Patrick McDonald
8/21/2009
即使将 AutoPostBack 设置为 true,TextBox 上仍然没有 LostFocus 事件
3赞
Patrick McDonald
8/21/2009
#3
我找到了一个博客,它似乎为这个问题提供了一个相当不错的解决方案。它涉及向 TextBox 子类添加自定义事件,并注册一个客户端脚本,该脚本在 onblur JavaScript 客户端事件中调用服务器端事件。
以下是我在 VB 中的实现:
Public Class MyTextBox
Inherits TextBox
Implements IPostBackEventHandler
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
If Not Page.ClientScript.IsClientScriptBlockRegistered("OnBlurTextBoxEvent") Then
Page.ClientScript.RegisterStartupScript(MyBase.GetType, "OnBlurTextBoxEvent", GetScript, True)
Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')")
End If
End Sub
Public Delegate Sub OnBlurDelegate(ByVal sender As Object, ByVal e As EventArgs)
Public Event Blur As OnBlurDelegate
Protected Sub OnBlur()
RaiseEvent Blur(Me, EventArgs.Empty)
End Sub
Private Function GetScript() As String
Return "function OnBlurred(control, arg)" & vbCrLf & _
"{" & vbCrLf & _
" __doPostBack(control, arg);" & vbCrLf & _
"}"
End Function
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
OnBlur()
End Sub
End Class
2赞
PjL
2/21/2010
#4
谢谢你,它就像一个魅力。只需更改一件事:将传递给 OnBlurred 函数的 UniqueID 值括在引号中,以便将其用作字符串而不是控件实例。那是:
Attributes.Add("onblur", "OnBlurred(" & UniqueID & ",'')")
成为:
Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')")
评论