ASP.NET文本框LostFocus事件(ASP.NET TextBox LostFocus ev

2019-07-02 19:16发布

我需要在服务器端代码触发时要调用一个TextBox失去焦点。

我知道有是的onblur客户端事件,并没有LostFocus事件,所以我怎么可能会导致当我的文本框失去焦点发生回发?

更新:

我发现了一个博客 ,这似乎给一个相当不错的解决了这一点。 它涉及添加自定义事件,以一个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

Answer 1:

我发现了一个博客 ,这似乎给一个相当不错的解决了这一点。 它涉及添加自定义事件,以一个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


Answer 2:

感谢您的,它就像一个魅力。 只是有一点你需要改变:包装传递给在引号OnBlurred功能的UniqueID值,所以使用它作为一个字符串,而不是控制实例。 那是:

Attributes.Add("onblur", "OnBlurred(" & UniqueID & ",'')") 

变为:

Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')") 


Answer 3:

嗯,这是一个相当奇怪的计划,但你可以使用“的onblur”在客户端调用“form.submit();”。



Answer 4:

你为什么不使用ASP文本框与AutoPostBack属性设置为true。

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>


文章来源: ASP.NET TextBox LostFocus event