2009-08-21 39 views
5

Necesito activar el código en el servidor para llamar cuando un cuadro de texto pierde el foco.Evento ASP.NET TextBox LostFocus

Sé que existe el evento paralelo del cliente onblur, y que no hay ningún evento LostFocus, entonces, ¿cómo puedo hacer que se produzca una devolución de datos cuando mi TextBox pierde el foco?

Actualización:

he encontrado un blog que parece dar una solución bastante decente a esto. Implica agregar un evento personalizado a una subclase de TextBox y registrar un script de cliente que llama al evento del lado del servidor en el evento de cliente de onblur JavaScript.

La siguiente es mi aplicación en 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 

Respuesta

3

he encontrado un blog que parece dar una solución bastante decente a esto. Implica agregar un evento personalizado a una subclase de TextBox y registrar un script de cliente que llama al evento del lado del servidor en el evento de cliente de onblur JavaScript.

La siguiente es mi aplicación en 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 
0

Bueno, es un plan bastante raro, pero se puede utilizar 'onBlur' en el lado del cliente para llamar 'form.submit();'.

+0

que no probamos esto como que necesito saber qué control ha perdido el foco –

-1

¿Por qué no utiliza asp textbox con AutoPostBack propiedad establecida en verdadero.

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

Incluso con AutoPostBack establece en true, todavía no existe un evento LostFocus en el TextBox –

2

Gracias por eso, funciona como un encanto. Solo necesita cambiar una cosa: ajuste el valor UniqueID pasado a la función OnBlurred entre comillas, por lo que se utiliza como una cadena y no como la instancia de control. Es decir:

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

se convierte en:

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

Gracias por eso, he actualizado mi respuesta con su comentario –

Cuestiones relacionadas