1

数秒間クリックした後、サーバー側のasp.netボタンコントロールを無効にしてから、サーバー側のイベントを発生させたいです。setTimeout を使用しようとしていますが、setTimeout を使用すると、サーバー側のイベントが発生しません。誰でも助けることができますか?

   <script type="text/javascript">
    function disableBtn(btnId, dspTxt) {
        var btn = document.getElementById(btnId);
        btn.value = dspTxt;
        setTimeout(btn.disabled = true,1000);
    }
</script>
4

3 に答える 3

1

フォームに 2 つのボタンを配置します。

<asp:Button ID="ButtonToDisable" runat="server" Text="Button" />
<asp:LinkButton ID="PostBackLinkButton" runat="server" onclick="PostBackLinkButton_Click"></asp:LinkButton>

1 つ目は 2 秒後に無効になるボタンで、2 つ目はポストバックを行うボタンです。

次に、このコードを page.cs 内に挿入します。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ClientScript.RegisterStartupScript(this.GetType(), "timer",
               "setTimeout(function(){" + Page.ClientScript.GetPostBackEventReference(PostBackLinkButton, String.Empty) + "},2000)", true);
        }
    }

    protected void PostBackLinkButton_Click(object sender, EventArgs e)
    {
        ButtonToDisable.Enabled = false;
        ButtonToDisable.Text = "Button is disabled!";
    }

ページを実行して 2 秒間待つだけで、ポストバックが発生し、PostBackLinkBut​​ton が無効になります。

ポストバックがユーザーに表示されないようにするには、更新パネル内にボタンを配置します。

于 2012-12-13T11:32:03.423 に答える
1

私が正しく理解していれば、次のようなものが必要です:

 var isClicked=false;
 $('.myButton').click(function (e) {
    e=e?e:window.event;
    if(!isClicked){
        if($.browser.msie){e.cancelBubble=true; e.returnValue=false;}
      else
        e.preventDefault();
    isClicked=true;   
    $(this).attr('disabled','disabled');
    setTimeout(function(){delayClick();},1000);
  }

});
function delayClick()
{
   $(this).removeAttr('disabled');
   $('.myButton').click();

}
于 2012-12-13T11:36:46.233 に答える
1

jQueryを使ってみてはどうでしょうか?

$('#buttonId').attr("disabled", true);

または関数では

function disableBtn(btnId, dspTxt) {
  var button = $(btnId);
  button.attr("disabled", true);
  button.text(dspTxt);
}

http://www.w3schools.com/jsref/prop_select_disabled.asp

于 2012-12-13T10:58:20.497 に答える