禁用LinkBut​​ton不会禁用javascript中的click事件

时间:2009-04-16 02:08:18

标签: c# asp.net javascript

我想在客户端网站上禁用LinkButton垃圾。

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

这会禁用链接,但我仍然可以点击链接并执行PostBack。

我有什么方法可以禁用链接。

代码:

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

呈现为回发的链接...我在新窗口中打开回发页面。 我想要做的是..当我第一次点击链接时......它将打开一个新页面,然后它将禁用该链接。

我正在做的是..点击该链接我有一个javascript函数..这是这样的..

在LinkDisable ......

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

当我这样做时...链接变灰了......但我仍然能够点击它。我想阻止用户第二次点击它。

感谢任何帮助。

7 个答案:

答案 0 :(得分:2)

如果要禁用链接按钮,只需使用以下代码。

<强>标记

imageButton.setImageDrawable(getResources().getDrawable(R.drawable.example));

C#代码

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

答案 1 :(得分:1)

使用jQuery,您可以在独立于浏览器的情况下执行此操作,方法是替换href或添加抢占并停止跟踪链接的单击处理程序。

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

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

disabled-link类有一些CSS来改变链接的外观,以便在视觉上看起来是禁用的。

请注意,如果控件位于命名容器(如GridView或UserControl)中,则必须使用id上的“ends 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
        }
    });
}); 

答案 2 :(得分:1)

在不使用jQuery的情况下禁用链接(并将其呈现为普通文本)的最简单方法是完全删除它的href属性。

例如,这里是渲染链接:

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

所需的JavaScript:

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

这适用于IE和Firefox,但您可能希望进行更广泛的测试。

答案 3 :(得分: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设置为Static。

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

答案 4 :(得分:0)

这是一个基于您发布的评论的编辑,允许在第一次点击时遵循链接按钮,但不是。

要允许第一次点击链接,但不能在此之后点击,在页面上创建一个变量以跟踪点击。

var clicked = 0;

由于链接按钮在前端产生href,你可以这样做

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

答案 5 :(得分:0)

找到解决方案的人......这些javascript解决方案可以正常工作,但是如果你刷新页面......它会清除变量。

那就是那里的一个小虫..

使用“userData”找到解决方案...... IE会话数据......真的很酷。

结帐此链接:http://www.eggheadcafe.com/articles/20010615.asp

答案 6 :(得分:0)

试试这个。最简单的例子

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