2012-04-24 34 views
0

我想禁用linkbutton,但沒有運氣!我嘗試了所有可能的解決方案,但是我無法限制用戶單擊該鏈接按鈕。最終用戶不應該能夠點擊多於一個的鏈接按鈕。一次點擊就是這樣!按鈕必須馬上開始!我怎樣才能做到這一點?我的按鈕是ModalPopupExtender,這是一個進行付款按鈕,使圖像的用戶點擊該按鈕超過一個讓多支付:(請幫助我如何使用JavaScript禁用linkbutton

我的解決方案是與此類似:

function returnFalse() { 
    return false; 
} 

function disableLinkButton(clientID) { 
    document.getElementById(clientID).disabled = "disabled"; 
    document.getElementById(clientID).onclick = returnFalse; 
} 
+2

如何只簡單地刪除/隱藏按鈕? – 2012-04-24 11:05:27

+0

DUP:http://stackoverflow.com/questions/9682833/how-to-completely-disable-the-link-button/9683378#9683378和http://stackoverflow.com/questions/754497/disabling-linkbutton-doesnt -disable-the-click-event-in-javascript – PresleyDias 2012-04-24 11:07:04

+0

@TobiasKrogh,可以工作,但回發之後。如果您的頁面發送大量數據並且用戶在頁面提交時多次單擊按鈕會怎麼樣? – 2012-12-04 16:50:50

回答

0

你可以做到這一點是這樣的:

function disableLink(id) { 
    document.all[id].removeAttribute('href'); 
}​ 

HTML:

<a id='link1' href="javascript:disableLink('link1');">Click me</a> 

(或)試試這個:

document.getElementById("#<%=LinkButton.ClientID%>").attr("disabled", true); 
+1

第一個殺死OnClick事件 第二個在回發後禁用按鈕 所以兩個都沒有工作 – 2012-04-24 11:19:19

+0

更新了我的答案,並讓我知道它是否有效。 – coder 2012-04-24 11:33:17

0

返回false應該工作。試試這個:

function disableLinkButton(clientID) { 
document.getElementById(clientID).disabled = "disabled"; 
document.getElementById(clientID).onclick = return returnFalse; 
} 
0

你可以嘗試這樣的事情,給你一個想法:

document.getElementById(clientID).onclick = function() { 
    /* process payment */ 
    this.onclick = function(){}; 
} 
0

想要一些像這樣的事情。

document.getElementById(clientID).setAttribute("disabled", "true"); 
0

我假設你使用的是asp.net鏈接按鈕。如果是的話,問題可能是回發刷新頁面,你的JavaScript代碼不起作用。如果可能的話,嘗試從後面的代碼中禁用按鈕,如button1.Enable = fales;

否則,您可以使用ajax進行支付以防止回傳。

<asp:LinkButton id="button1" runat=server" onclientclick="javascript:return callafunction(this);"/> 

function callafunction(obj) 
{ 
callPaymentAJAXMethod(); 
obj.setAttribute("disabled", "true"); 
return false; 
} 

如果這是不可能的,你需要在你想要以同樣的方式工作,通過增加服務器端hiddenfield做一個棘手的解決方案。最初將其值設置爲「0」。然後在linkbutton的點擊代碼後面將其設置爲「1」。然後在頁面加載中使用javascript檢查隱藏文件的值,如果其「1」禁用鏈接按鈕,如下所示。

window.onload=function() 
{ 
if(document.getElementById("hid1").value=="1") 
{ 
document.getElementById("button1").setAttribute("disabled", "true"); 
} 
} 

編輯:還有一個提示,如果你正在使用更新面板請確保您的客戶端HTML是通過檢查鏈接按鈕(使用Chrome或Mozilla的檢查元素選項)按鈕,點擊後更新。有些時候,如果使用更新面板,DOM可能不會刷新。如果這是問題,請嘗試爲更新面板添加觸發器。

-1

這段代碼在單擊後禁用鏈接按鈕。

<asp:LinkButton clicked="0" ID="cmdSubmit" runat="server" OnClientClick="return AllowClickOnce(this.id);" 
       OnClick="cmdSubmit_Click">Submit Order</asp:LinkButton> 
<script type="text/javascript"> 
      function AllowClickOnce(linkbuttonID) 
      { 
      var linkbutton = document.getElementById(linkbuttonID); 
      if (linkbutton.clicked == '0') 
      { 
      linkbutton.clicked='1'; 
      linkbutton.disabled = true; 
      return true; 
      } 
      else 
      { 
      return false; 
      } 
      } 
     </script> 

來源:link

+0

如果該按鈕沒有將'clicked'屬性預設爲'0',該按鈕將永遠不會觸發。簡單地使用!linkbutton.clicked會得到更好的結果,但這仍然不是一個完美的解決方案。在我的例子中,按鈕仍然沒有發射:( – shousper 2013-04-10 01:34:32

1

以爲我會扔我的解決方案在那裏:

$('a.btn').click(function() { 
    var self = $(this); 
    setTimeout(function() { self.attr('href', 'javascript:void(0);'); }, 10); 
    return true; 
}); 

這工作得很好,我在IE10,但我不明白爲什麼它止跌」也可以在舊版本中使用。

如果您在使用異步回發和你的UpdatePanel的還包含您不希望用戶點擊憤怒按鈕,下面是我的解決方案看到,因爲jQuery的「活」功能不起作用:

$(function() { 
    function bindButtonDisabler() { 
     $('a.btn').click(function() { 
      var self = $(this); 
      setTimeout(function() { self.attr('href', 'javascript:void(0);'); }, 10); 
      return true; 
     }); 
    } 

    bindButtonDisabler(); // Initial bind on DOM ready. 

    $(window).load(function() { // Ensure re-bind after postback (optional) 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(bindButtonDisabler); 
    }); 
}); 

希望有人發現了它有用:)

0

我真的想表明鏈接是殘疾人,我稍微修改@shousper的代碼。

我用這個來防止信用卡形式多的點擊和它工作得很好。