2009-04-16 80 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>