0

我有一个带有按钮的中继器,可以将一些数据保存到数据库中。我的问题是有时调用数据库需要一点时间,用户有时会单击保存几次,导致将多个条目添加到数据库中。所以我的第一个想法是添加一个 throbber 并在单击时禁用该按钮。悸动者正在旋转,但当按钮被禁用时,它会阻止对服务器的调用。所以我看了看这个,但由于我有一堆不同的按钮(更新,添加,...),所以有几个不同的服务器端方法被调用,所以我不能只发布__doPostBack($(button).attr('id'),''). 所以我在想我可能需要做一个 ajax 调用,但我想看看是否还有其他想法。这是我的代码:onClientClick实际上是在服务器端设置的,但这基本上是正在做的事情。

中继器

<div style="position: relative; float: left;">
      <asp:Button ID="btnSave" runat="server" Text="Assign" OnClientClick="return fnAssignedButtonPressed(this);", OnClick="btnSave_Click" />
</div>

Javascript

function fnAssignedButtonPressed(button) {
//validating inputs
var valid = true;

        if(valid)
        {
           $(button).attr('disabled', 'disabled');
           showWaitCursor(true);
           __doPostBack($(button).attr('id'),'');
        }
  return valid;
}

服务器端

protected void btnSave_Click(object sender, EventArgs e)
{
 //save
 // This method doesn't call called when I disable the button!!
}
4

2 回答 2

0

我最终这样做了,但我不知道我对此有何感想..

function fnAssignedButtonPressed(button) 
{ 
//validating inputs 
var valid = true;
     if(valid)
     {
       showWaitCursor(true);
       //set a timeout and then disable the button, this prevents the user from click the button multiple times.
       // need the timeout bc when the button becomes disabled it prevents the onlick event from firing.
       setTimeout(function() {fnDisableButton(button)}, 1); 
    }
}

function fnDisableButton(button)
{
    $(button).attr('disabled', 'disabled');
}
于 2012-05-18T18:09:12.863 回答
0

根据您的情况,Ajax 绝对是一个不错的选择。否则,您可以使用 jquery 的 UI 对话框显示请等待模式,例如:

$('<div class="dialog" title="Please Wait">Please wait while your request is processing</div>').dialog({
    modal: true,
    width: 350,
    open: function (event, ui) {
        $(".ui-dialog-titlebar-close").hide();
    },
});

一旦服务器返回,模式应该会自动消失,并且 UI 对话框的模式选项会使屏幕变灰,因此用户无法单击任何内容。

于 2012-05-18T18:09:41.083 回答