使用jQuery启用/禁用.NET 4.0按钮

4
我正在尝试使用jQuery启用.net LinkButton,但在.NET 4.0中有了一些变化,简单地使用attr(“disabled”,“disabled”)或removeAttr(“disabled”)将无法正常工作。
这是按钮。
<asp:LinkButton ID="LinkButtonContinue" runat="server" Text="Continue" CssClass="button continue" Enabled="false"></asp:LinkButton>

这将呈现如下:
<a class="aspNetDisabled button continue" id="ContentPlaceHolder1_LinkButtonContinue">Continue</a>

请注意新添加的aspNetDisabled类。
于是我尝试了这个:
jQuery(".continue").removeAttr("disabled").removeClass("aspNetDisabled");

并且这个:

jQuery(".continue").removeClass("aspNetDisabled");

都不起作用,因为没有要删除的 disabled 属性,所以我假设它使用JS来禁用按钮?

我该如何启用具有此类的按钮?

有什么想法吗?

非常感谢

Chris


尝试这个:$('.continue').attr("disabled", true); - Ashwini Verma
4个回答

2
我认为问题出在当您生成服务器端的类似按钮时,页面会添加一些 JavaScript 的废话,例如:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

按钮的href属性可能会有类似于javascript:__doPostBack('id','')这样的内容。

我认为你应该尝试在服务器端手动定义此href值(或者在页面加载时使用JavaScript动态定义,可能更容易处理生成的可怕ID)。

在您的情况下,如果锚点未被禁用,则没有任何操作,因为没有href属性。

编辑: 避免在服务器端禁用按钮,直接在页面加载时使用JavaScript禁用它是否更容易?


1
我假设你想要进行一个postback,这种情况下你需要手动提交表单。你可能需要定义JavaScript来提交这个表单,具体取决于你的页面上是否有其他启用了服务器端的按钮。 - Zac
基本上,服务器提供的页面有一个最初被禁用的提交按钮。一旦用户成功完成该部分,按钮将变为可用状态,用户可以单击该按钮以继续进行。 - Chris Spittles
我建议在服务器端启用按钮,当页面加载时在客户端禁用它。或者,如上所述,确保您的页面具有href属性,通过javascript调用可怕的postback方法。如果您启用了asp按钮,则该javascript代码将自动添加到页面中,但如果没有,则需要在标记中手动添加它。明白了吗? - Zac

1

也许这对你有用:

$('.continue').disabled = false;

另一种可用的方法是:

$('.continue').attr("disabled", "");

根据我们在我的答案下面的评论,您可以看到我们已经尝试过这个了。 - middelpat
对于第一个片段,我承认我的错误,但是第二个片段没有提到,所以我认为它可能会有用。 - b_meyer

0

仅需使用:

$('.continue').removeClass("aspNetDisabled");

应该可以工作吧


谢谢您的快速回复。我已经尝试过了,但即使删除了类,按钮仍然无法使用。 - Chris Spittles
我猜JavaScript也禁用了按钮。你尝试添加一个enabled="true"或者disabled="false"的属性了吗?我不知道它是否有效。只是分享我的想法。 - middelpat

0

尝试像这样做...

<head id="Head1" runat="server">
    <title></title>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>

    <style type="text/css">
        .disabled-link
        {
            color: Gray;
            cursor: default;
        }
    </style>

    <script type="text/javascript">

        $(function() {
            var linkButton1 = $('.continue'); // $('#<%= LinkButton1.ClientID %>')
            var href = linkButton1.attr('href');
            $('#<%= EnableButton.ClientID %>').click(function(e) {
                e.preventDefault();
                linkButton1.attr('href', linkButton1.attr('myCustomAttr')).removeClass('disabled-link');
            });

            $('#<%= DisableButton.ClientID %>').click(function(e) {
                e.preventDefault();
                linkButton1.attr('href', '#').attr('myCustomAttr', href).addClass('disabled-link');

            });
        });

    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:LinkButton ID="LinkButton1" runat="server"  CssClass="button continue" PostBackUrl="test.aspx">LinkButton</asp:LinkButton>
    <br />
    <asp:Button ID="DisableButton" runat="server" Text="Disable" />
    <asp:Button ID="EnableButton" runat="server" Text="Enable" />
    </form>
</body>

谢谢,但是你的方法需要我使用两个按钮来完成一个按钮的工作。我相信一定有其他的方法。 - Chris Spittles
按钮仅用于展示功能,您始终可以在客户端使用某些状态变量来切换行为。 - Amitd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接