2009-04-16 78 views
3

我想在客戶端站點上禁用LinkButton碰撞。禁用LinkBut​​ton不會禁用javascript中的單擊事件

objLinkButton.disabled = true; 
// or 
objLinkButton.disabled = -1; 

這將禁用鏈接,但我仍然可以單擊鏈接並執行PostBack。

有什麼辦法可以禁用鏈接。

代碼:

<asp:linkbutton id="xyz" runat="server" 
       onClick="javascript:LinkDisable(this)" ></asp:linkbutton> 

這使得作爲不回發...我打開的頁面上回發在新窗口中的鏈接。 我想要做的是......當我第一次點擊鏈接時,它會打開一個新頁面,然後它將禁用鏈接。

我做什麼..這環節的onClick我有一個JavaScript函數..這是這樣的..

在LinkDisable ...

function LinkDisable(obj) 
{ 
obj.disabled = -1; 
obj.href = '#'; 
//Cant return false from here.. otherwise it wont postback... 
} 

當我做到這一點。鏈接變灰了......但我仍然可以點擊它。我想阻止用戶第二次點擊它。

任何幫助表示讚賞。

+0

你能提供一個代碼示例嗎? – bendewey 2009-04-16 02:23:07

回答

0

發現解決方案的傢伙......這些JavaScript解決方案將工作,但如果刷新頁面......它將清除變量。

所以這就是正確的有錯誤..

發現使用「用戶數據」的解決方案... IE瀏覽器會話的數據......它真的很酷。

結帳此鏈接:http://www.eggheadcafe.com/articles/20010615.asp

0

這是一個基於您發佈的評論的編輯,允許在第一次點擊後遵循linkbutton,否則不會。

要允許第一次點擊鏈接,但不能在此之後,在頁面上創建一個變量以跟蹤點擊。

var clicked = 0; 

由於產生了LinkBut​​ton在前端的HREFs,你可以如果你想在某些情況下頁面加載後做爲此

<a href="#" OnClientClick="return false"></a> 

的OnClientClick是特定於.NET

只有:

<a href="" id="linkbutton"> 

var linkbutton = document.getElementById("linkbutton"); 
linkbutton.onclick = function(){ 
    if(clicked != 0){ 
     //if other than 0, not followed 
     return false; 
    } 
    else{ 
     //link is followed here since it's the first time it's being clicked and clicked value = 0 
     clicked = clicked + 1; 
    } 
} 
+0

感謝您的回覆。不能這樣做...因爲這將不允許鏈接被第一次點擊。我希望第一次點擊鏈接並在新窗口中打開鏈接。但之後,即第二次點擊我想禁用它,即不可點擊。 – Ben 2009-04-16 02:48:07

+0

嗨達納, 此解決方案將適用於正常的鏈接,而不是當鏈接由LinkBut​​ton創建時。會發生什麼是..在linkbutton的情況下,它做回發。 因此,您用於保持跟蹤的變量在您每次執行回發時都會重置。我無法在此情況下觸摸服務器代碼。 – Ben 2009-04-16 04:47:24

1

使用jQuery,你可以在瀏覽器無關的替換href或通過添加一個單擊處理程序來搶佔和停止正在遵循的鏈接。

$('#objLinkButton').attr('href','#').addClass('disabled-link'); 

$('#objLinkButton').click(function() { return false; }) 
        .addClass('disabled-link'); 

disabled-link類有一些CSS改變鏈接的外觀,使其看起來禁用視覺。

請注意,如果此控件位於命名容器(如GridView或UserControl)中,則必須使用id上的「ending with」選擇器來引用該名稱。

$('id$="objLinkButton"')... 

編輯:基於您的更新。試試這個:

var code = null; 
$(document).ready(function() { 
    var button = $('#objLinkButton'); 
    code = button.attr('href').replace(/javascript:/,''); // save postback function 
    button.attr('href','#'); // replace postback function 
    button.click(function() { 
     $(this).unbind('click'); // get rid of click handler so it only fires once 
     if (code) { // if link hasn't been used 
      eval(code); // do post back 
     } 
    }); 
}); 
1

禁用鏈接(並使其像普通文本),而無需使用jQuery的最簡單的方法是刪除它href完全屬性。

例如這裏是呈現鏈接:

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

而且需要的JavaScript:

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

這在IE和Firefox對我的作品,但您可能希望做一些更廣泛的測試。

1

我建設上tvanfosson的答案。他使用jQuery的答案效果很好,但如果你有驗證器,它會讓事情變得糟糕。這裏有:

var code = null; 
$(document).ready(function() { 
    var button = $('#SubmitPaymentLnkBtn'); 
    code = button.attr('href').replace(/javascript:/, ''); 
    button.attr('href', '#'); // replace postback function 
    button.click(function() { 
     if (Page_ClientValidate('PaymentInfo')) { 
          // now only runs if above validationGroup is valid 
      $(this).unbind('click'); 
      if (code) { 
       $(this).addClass('disabled-btn'); 
       eval(code); // do post back 
      } 
     } 
    }); 
}); 

然後在你的標記中,一定要將ClientIDMode設置爲靜態。

<asp:LinkButton ID="SubmitPaymentLnkBtn" Text=" submit " runat="server" CssClass="BlackBgText" ValidationGroup="PaymentInfo" Font-Size="22px" onclick="SubmitPaymentLnkBtn_Click" ClientIDMode="Static" /> 
2

如果你想禁用linkbutton,只需使用下面的代碼。

標記

<asp:LinkButton ID="lnkButton" Text="Submit" runat="server"> 
</asp:LinkButton> 

C#代碼

this.lnkButton.Attributes.Add("disabled","disabled"); 
0

試試這個。最簡單的例子

<asp:LinkButton ID="LinkButton6" runat="server" disabled="disabled" OnClientClick="return false;"> Test Button</asp:LinkButton>