ASP.NET TextBox LostFocus 事件

ASP.NET TextBox LostFocus event

提问人:Patrick McDonald 提问时间:8/21/2009 最后编辑:Patrick McDonald 更新时间:7/12/2010 访问量:43816

问:

我需要在服务器端触发代码,以便在 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
asp.net 文本框 失去焦点 自定义事件

评论


答:

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 & "','')")