ASP.NET TextBox LostFocus event
Solution 1
I have found a blog which seems to give a pretty decent solution to this. It involves adding a custom event to a TextBox subclass, and registering a client script which calls the server-side event in the onblur JavaScript client event.
The following is my implementation in 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
Solution 2
Thanks for that, it works like a charm. Just one thing you need to change: wrap the UniqueID value passed to the OnBlurred function in quotes, so it is used as a string and not the control instance. That is:
Attributes.Add("onblur", "OnBlurred(" & UniqueID & ",'')")
becomes:
Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')")
Patrick McDonald
.NET Developer, F#, C#, ASP.NET MVC, previously VB.NET, VB6
Updated on July 14, 2022Comments
-
Patrick McDonald almost 2 years
I need to trigger code on the server side to be called when a TextBox loses focus.
I know there is the onblur client side event, and that there is no LostFocus event, so how can I cause a postback to occur when my TextBox loses focus?
Update:
I have found a blog which seems to give a pretty decent solution to this. It involves adding a custom event to a TextBox subclass, and registering a client script which calls the server-side event in the onblur JavaScript client event.
The following is my implementation in 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
-
Patrick McDonald almost 15 yearsEven with AutoPostBack set to true, there is still no LostFocus event on the TextBox
-
Patrick McDonald almost 15 yearsI didn't try this as I need to know what control has lost focus