Событие ASP.NET TextBox LostFocus - PullRequest
5 голосов
/ 21 августа 2009

Мне нужно вызвать код на стороне сервера для вызова, когда 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

Ответы [ 4 ]

3 голосов
/ 21 августа 2009

Я нашел блог , который, кажется, дает довольно приличное решение для этого. Он включает добавление пользовательского события в подкласс 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 голосов
/ 20 февраля 2010

Спасибо за это, это работает как шарм. Единственное, что вам нужно изменить: обернуть значение UniqueID, переданное функции OnBlurn, в кавычки, чтобы оно использовалось как строка, а не как экземпляр элемента управления. То есть:

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

становится:

Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')") 
0 голосов
/ 21 августа 2009

Почему бы вам не использовать текстовое поле asp с AutoPostBack свойство установлено в true.

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
0 голосов
/ 21 августа 2009

Что ж, это довольно странный план, но вы можете использовать onblur на стороне клиента для вызова form.submit ();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...