地球上の他のすべての Web 開発者と同様に、ユーザーがフォームの送信ボタンをダブルクリックするという問題があります。私の理解では、この問題を処理する従来の方法は、最初のクリックの直後にボタンを無効にすることですが、これを行うと投稿されません。
私はこれについていくつかの調査を行いましたが、神は十分な情報があることを知っていますが、フォーム送信のボタンを無効にする、ボタンを無効にするなどの他の質問は機能しているようです。送信後にボタンを無効にする元のポスターには、私と同じ問題があったようですが、彼がそれをどのように/解決したかについては言及されていません。
これを繰り返す方法に関するコードを次に示します(IE8 Beta2でテストされましたが、IE7でも同じ問題がありました)
私のaspxコード
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
function btn_onClick()
{
var chk = document.getElementById("chk");
if(chk.checked)
{
var btn = document.getElementById("btn");
btn.disabled = true;
}
}
</script>
<body>
<form id="form1" runat="server">
<asp:Literal ID="lit" Text="--:--:--" runat="server" />
<br />
<asp:Button ID="btn" Text="Submit" runat="server" />
<br />
<input type="checkbox" id="chk" />Disable button on first click
</form>
</body>
</html>
私のcsコード
using System;
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
btn.Click += new EventHandler(btn_Click);
btn.OnClientClick = "btn_onClick();";
}
void btn_Click(object sender, EventArgs e)
{
lit.Text = DateTime.Now.ToString("HH:mm:ss");
}
}
ボタンをクリックすると、ポストバックが発生し、時刻が更新されることに注意してください。ただし、チェックボックスをオンにすると、次にボタンをクリックしたときにボタンが無効になりますが (予想どおり)、ポストバックは行われません。
ここで何が欠けているのですか?
前もって感謝します。