1

单击后,我使用以下 Javascript 禁用按钮:

var c = 0;
function DisableClick(target) {
    var objName = target;
    document.getElementById(objName).disabled = true;
    c = c + 1;
    msg = 'Please Wait...(' + c + ')!';
    document.getElementById(objName).value = msg;
    var t = setTimeout('DisableClick()', 1000);
}

<asp:Button ID="btnLogin" runat="server" CssClass="cssLoginButton blue"  Text="Log in" ToolTip="Log in" ValidationGroup="UserLogin" onclick="btnLogin_Click" OnClientClick="DisableClick('btnLogin')" />

我的 Javascript 给出了这个错误:

Microsoft JScript 运行时错误:无法设置属性“已禁用”的值:对象为空或未定义

脚本给出的错误

我该如何解决这个问题?

4

4 回答 4

1

您可以在 javascript 函数中传递单击的按钮对象。如果不需要回发,则返回 false。

改变

OnClientClick="DisableClick('btnLogin')" 

// the DisableClick make a loop, so make the return here.
OnClientClick="DisableClick(this);return false;" 


function DisableClick(target) {   
    target.disabled = true;
    c = c + 1;
    msg = 'Please Wait...(' + c + ')!';
    target.value = msg;

    // The DisableClick needs the target parametre, so send it again
    //  but need to keep it here for work.
    var me = target;
    var t = setTimeout(function(){DisableClick(me);}, 1000);
}
于 2012-11-24T06:58:06.263 回答
0

你可以做

OnClientClick = "JavaScript: return false; "

document.getElementbyid (objectName) 

返回空

你确定你传递的是正确的 id 吗?按钮?

于 2012-11-24T06:54:10.177 回答
0

你可以做的是调用身体负载的函数,它应该可以正常工作。所以代码将是

<script type="text/javascript">
function disableBtn()
{
var btn= document.getElementById("<%=Button1.ClientID%>");
btn.disabled=true;
}
</script>

html

<body onload="javascript:disableBtn();">

 <asp:Button ID="Button1" runat="server" Text="Button" />
 ...
 </body>

希望对你有帮助 !

于 2012-11-24T06:56:45.107 回答
0

详细信息:这应该可以解决您的禁用按钮的解决方案以及在该过程完成之前显示一条消息

标记

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>

      .... Your other code

        <asp:Button ID="btnLogin" runat="server" CssClass="cssLoginButton blue"  Text="Log in" ToolTip="Log in"
           OnClientClick="this.disabled=true;" ValidationGroup="UserLogin" onclick="btnLogin_Click"  />

     </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdateProgress ID="UpdateProgress1" runat="server">
        <ProgressTemplate>
            Please Wait...
        </ProgressTemplate>
    </asp:UpdateProgress>

测试它

背后的代码

protected void btnLogin_Click(object sender, EventArgs e)
{
   // Introducing delay for demonstration.
   System.Threading.Thread.Sleep(3000);      
}
于 2012-11-24T07:24:05.523 回答