5

TextBoxがフォーカスを失ったときに呼び出されるように、サーバー側でコードをトリガーする必要があります。

onblurクライアント側イベントがあり、LostFocusイベントがないことを知っているので、TextBoxがフォーカスを失ったときにポストバックを発生させるにはどうすればよいですか?

アップデート:

私はこれにかなりまともな解決策を与えるように思われるブログを見つけました。これには、カスタムイベントをTextBoxサブクラスに追加し、サーバー側イベントを呼び出すクライアントスクリプトをonblurJavaScriptクライアントイベントに登録することが含まれます。

以下は、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

4 に答える 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
于 2009-08-21T13:14:02.693 に答える
2

おかげで、それは魅力のように機能します。変更する必要があるのは 1 つだけです。OnBlurred 関数に渡される UniqueID 値を引用符で囲み、コントロール インスタンスではなく文字列として使用されるようにします。あれは:

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

になります:

Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')") 
于 2010-02-20T17:32:00.057 に答える
0

まあ、それはかなり奇妙な計画ですが、クライアント側で「onblur」を使用して「form.submit();」を呼び出すことができます。

于 2009-08-21T09:20:17.633 に答える
-1

AutoPostBackプロパティを true に設定してasp textbox を使用しないのはなぜですか。

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
于 2009-08-21T09:29:18.473 に答える