【问题标题】:Disabling LinkButton doesn't disable the click event in javascript禁用 LinkBut​​ton 不会禁用 javascript 中的点击事件
【发布时间】:2009-04-16 02:08:18
【问题描述】:

我想在客户端站点上禁用LinkButton 链接。

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

这会禁用链接,但我仍然可以单击链接并执行回发。

有什么办法可以关闭链接。

代码:

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

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

感谢任何帮助。

【问题讨论】:

  • 能否提供代码示例?

标签: c# asp.net javascript


【解决方案1】:

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

标记

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

C# 代码

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

【讨论】:

    【解决方案2】:

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

    例如这里是渲染的链接:

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

    以及所需的 JavaScript:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      disabled-link 类有一些 CSS 来更改链接的外观,使其在视觉上看起来被禁用。

      请注意,如果控件位于命名容器(如 GridView 或 UserControl)内,则必须使用 id 上的“结尾为”选择器来引用名称。

      $('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
              }
          });
      }); 
      

      【讨论】:

      • 感谢您的解决方案,但我只需要一个基本解决方案。目前还没有使用 Jquery。我要加星
      • 你可以在没有 jQuery 的情况下做到这一点,但坦率地说,jQuery 非常基础,其他任何东西都只是重新实现 jQuery 的一部分。一旦您掌握了一点 javascript 并开始尝试使其与浏览器无关,您会发现在学习和使用框架方面投入一点点是有回报的。
      • 我明白你的意思 tavnfosson。感谢你的帮助。我仍然不知道如何解决这个问题..只是禁用并使其返回 false 对我不起作用..因为我必须第一次单击链接然后禁用它。我会尝试以某种方式修复它......截至目前我不知道修复
      • 代码将再次被重置为 NULL 权利.. 如果您在整个页面再次呈现时进行回发。如果我错了,请纠正我。
      • 我理解你说回发发生在另一个窗口中。如果这不正确,我们就浪费了很多时间。您可以删除 LinkBut​​ton 服务器端并将其替换为文字。
      【解决方案4】:

      我正在构建 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" />
      

      【讨论】:

        【解决方案5】:

        这是基于您发布的评论的编辑,以允许在第一次点击时跟随链接按钮,但不是其他情况。

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

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

        【讨论】:

        • 感谢您的回复。不能这样做......因为这将不允许即使是第一次点击链接。我希望第一次单击该链接并在新窗口中打开该链接。但在那之后,即第二次点击我想禁用它,即不可点击。
        • 您好 Dhana,此解决方案适用于普通链接,而不适用于由 LinkBut​​ton 创建的链接。会发生什么......如果是链接按钮,它会回发。因此,每次进行回发时,您用于跟踪的变量都会重置。在这种情况下,我无法触及服务器代码。
        • 忘记了回发的事情,不是吗!另一种骇人听闻的方法是将其分配给一个 cookie,这将是持久的。
        • 谢谢 Dhana... 我收回我的评论.. 因为我正在回帖并在新窗口中打开 Ty
        【解决方案6】:

        找到解决方案的家伙...这些 javascript 解决方案可以工作,但如果您刷新页面...它将清除变量。

        所以这就是一个错误..

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

        查看此链接:http://www.eggheadcafe.com/articles/20010615.asp

        【讨论】:

          【解决方案7】:

          试试这个。最简单的例子

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多