1

ASP.NET Web フォーム アプリケーションがあります。

btnFinish私の目標は、複数の送信を避けるために、ユーザーがクリックしたときに送信ボタンを無効にすることです。

<asp:Button ID="btnFinish" runat="server" Text="Finish" UseSubmitBehavior="false" 
CausesValidation="true" CommandName="MoveComplete" CssClass="buttonStyle"/>

Javascript関数は次のとおりです。

 function Validate(btnFinishId) {

            btnObj = document.getElementById(btnFinishId)

            if (Page_IsValid) {
                btnObj.disabled = true
            }
            else {
                 alert('Page has some validation error');
                 }

            // this is to prevent the actual submit
            e.preventDefault();

            return false;
    };

btnFinishFinishNavigationTemplateASP.NET ウィザード コントロール内に配置されます。したがって、実行時エラーを回避するために、プログラムでコントロールを取得し、それをボタンClientIDのイベントに追加する必要があります。OnClientClick

Button btFinish = MyWizard.FindControl("FinishNavigationTemplateContainerID$btnFinish") as Button;

if (btFinish != null){
   btFinish.Attributes.Add("onclientclick", "Validate('" + btFinish.ClientID + "');");
}

しかし、うまくいきません。Firebugを使用して、ブラウザーによってレンダリングされたページを確認しますが、ソース コードは完璧に見えますが、クリックしてもJavascript関数が実行されません

Javascript関数で、コードビハインドを使用する代わりに and に置き換えて、次のValidate(btnFinishId)ように記述します。Validate()OnClientClick

 <asp:Button OnClientClick="Validate();" "ID="btnFinish" runat="server" Text="Finish" UseSubmitBehavior="false" 
    CausesValidation="true" CommandName="MoveComplete" CssClass="buttonStyle"/>

関数は実行されますが、もちろん、ボタン ID がないため、私が望むことはしません。誰にも解決策がありますか?

4

2 に答える 2

3

あなたは正しい軌道に乗っています。このようなものが動作するはずです:

<script type="text/javascript">
    validate = function(btn){

        //trigger client-side validation
        var valid = Page_ClientValidate("");

        //disable the button if the form is valid
        btn.disabled = valid;

        //trigger postback if the form is valid
        //otherwise do nothing
        return valid;                        
    }
</script>
<asp:Button ID="btnFinish" runat="server" Text="Finish" OnClientClick="return validate(this);" OnClick="btnFinish_Click" ... />

逆のように見えますが、次のように関数を短縮できます。

<script type="text/javascript">
    validate = function(btn){
        btn.disabled = Page_ClientValidate("");                        
        return btn.disabled;                        
    }
</script>
于 2012-04-26T15:27:14.667 に答える
0

1 つの方法は、ページに通常の HTML ボタンを作成し、jQuery でクリック イベントを追加することです。次に、css を使用して .net ボタンを非表示にできます。

HTML ボタンのクリック イベントでは、すべての .net ボタンのクリック イベントを実行できます。

$("#yourbutton").trigger("click");
于 2012-04-26T15:27:21.117 に答える