ASP.NET文本框失去焦点事件

5
我需要在服务器端触发代码,当TextBox失去焦点时调用。
我知道有onblur客户端事件,并且没有LostFocus事件,那么当我的TextBox失去焦点时,如何引起postback?
更新:
我找到了一个博客,似乎提供了一个相当不错的解决方案。 它涉及向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
4个回答

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

非常感谢,这个方法非常有效。只有一点需要更改:将传递给OnBlurred函数的UniqueID值用引号括起来,以便将其作为字符串而不是控制实例使用。即:

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

变成:

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

0

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


我没有尝试过这个,因为我需要知道哪个控件失去了焦点。 - Patrick McDonald

-1
为什么不使用设置了AutoPostBack属性的asp文本框呢?
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>

1
即使将AutoPostBack设置为true,文本框仍然没有失去焦点事件。 - Patrick McDonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接