2009-08-21 37 views
5

Tôi cần kích hoạt mã ở phía máy chủ để được gọi khi một TextBox mất tiêu điểm.ASP.NET TextBox Sự kiện LostFocus

Tôi biết có sự kiện bên khách hàng onblur, và rằng không có sự kiện LostFocus, vậy làm cách nào tôi có thể gây ra một postback xảy ra khi TextBox của tôi bị mất tiêu điểm?

Cập nhật:

Tôi đã tìm thấy một blog mà dường như để cho một giải pháp khá tốt cho việc này. Nó liên quan đến việc thêm một sự kiện tùy chỉnh vào một lớp con TextBox và đăng ký một kịch bản lệnh khách gọi là sự kiện phía máy chủ trong sự kiện khách hàng JavaScript onblur.

Sau đây là thực hiện của tôi trong 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 

Trả lời

3

Tôi đã tìm thấy một blog dường như đưa ra một giải pháp khá tốt cho điều này. Nó liên quan đến việc thêm một sự kiện tùy chỉnh vào một lớp con TextBox và đăng ký một kịch bản lệnh khách gọi là sự kiện phía máy chủ trong sự kiện khách hàng JavaScript onblur.

Sau đây là thực hiện của tôi trong 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

Vâng, đó là một kế hoạch khá kỳ quặc, nhưng bạn có thể sử dụng 'onblur' ở phía khách hàng để gọi 'form.submit();'.

+0

tôi không thử loại này như tôi cần phải biết những gì điều khiển đã bị mất tập trung –

-1

Tại sao bạn không sử dụng hộp văn bản asp với thuộc tính AutoPostBack được đặt thành true.

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

Ngay cả với AutoPostBack thiết lập là true, vẫn là không có sự kiện LostFocus trên TextBox –

2

Cảm ơn vì điều đó, nó hoạt động như một nét duyên dáng. Chỉ cần một điều bạn cần thay đổi: bọc giá trị UniqueID được truyền vào hàm OnBlurred trong dấu ngoặc kép, vì vậy nó được sử dụng như một chuỗi chứ không phải là cá thể điều khiển. Đó là:

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

trở thành:

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

Cảm ơn vì điều đó, tôi đã cập nhật câu trả lời của tôi với bình luận của bạn –

Các vấn đề liên quan