1

WebForms を使用して、IT のみがクリックされ、検証が通過した後にボタンを無効にする方法を教えてください。

私はあることを知っています:ダブルクリックを防ぐためにクリック後にasp.netボタンを無効にする

ただし、予約を確認する最後のボタンを押す前に、私のページには他のポストバックがあり、これらを許可する必要があります。

検証に合格することを確認する必要があるのは最後のボタン押しだけですが、無効になる前に1回だけ押すことができます。

コードは次のとおりです。

   protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        FinalButton.Attributes.Add("onclientclick", "if(Page_ClientValidate('vg')){this.disabled = true; }");
    }

}
protected void Button1_Click(object sender, EventArgs e)
{
    TextBox1.Text = "Hi";
}
protected void Button3_Click(object sender, EventArgs e)
{
    TextBox1.Text = "";
}

ASPX ページ:

 <p>
    <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="vg"></asp:TextBox>
</p>
<p>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Set TextBox1 to Hi" />
    <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="Set TextBox1 to Empty" />
</p>
<p>
    <asp:Button ID="FinalButton" runat="server" Text="Final Submit" ValidationGroup="vg" />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator" ValidationGroup="vg"></asp:RequiredFieldValidator>
</p>

そのため、テキストボックスにデータが入力されていない限り、「FinalButton」は送信されません (この部分は機能します)。ただし、テキストボックスにデータが入力されている場合は、ポストバックする前にダブルクリックを防ぐために無効にする必要がありますが、無効にならないため、ここのコードは正しくないと思います:

FinalButton.Attributes.Add("onclientclick", "if(Page_ClientValidate('vg')){this.disabled = true; }");

ページがレンダリングされたときのソースは、ボタンを次のように表示します。

<input type="submit" name="ctl00$MainContent$FinalButton" value="Final Submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$FinalButton&quot;, &quot;&quot;, true, &quot;vg&quot;, &quot;&quot;, false, false))" id="MainContent_FinalButton" onclientclick="if(Page_ClientValidate(&#39;vg&#39;)){this.disabled = true; }" />

ありがとうございました、

マーク

4

3 に答える 3

2

setTimeout トリックを使用して、ポストバックがトリガーされた直後にボタンを無効にすることができます。

<script>
    $("#<%= FinalButton.ClientID %>").click(function ()
    {
        var self = this;
        setTimeout(function ()
        {
            self.disabled = true;
        }, 0);
    });
</script>
于 2015-01-07T08:04:10.537 に答える