2012-11-24 149 views
1

我用下面的JavaScript點擊後禁用按鈕:JavaScript來禁用asp.net按鈕

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 runtime error: Unable to set value of the property 'disabled': object is null or undefined

Error Given by script

我怎樣才能解決這個?

回答

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); 
} 
+0

並且還必須返回false,否則正在回發。 – Aristos

+0

謝謝@Aristos,更新了我的答案。 – Adil

+0

謝謝@Aristos我得到這個錯誤** Microsoft JScript運行時錯誤:無法設置屬性'值'的值:對象爲空或未定義** –

0

你可以做

OnClientClick = "JavaScript: return false; " 

document.getElementbyid (objectName) 

返回null

你確定你要傳遞的正確的ID。按鈕?

+0

自己是個過客正確的ID。你可以在他的代碼中看到 – Smartboy

+0

@mihai是的我正在傳遞正確的名字 –

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> 

希望這將幫助你!

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);  
}