使用 jquery 切换 LinkButton 的启用/禁用状态
Posted
技术标签:
【中文标题】使用 jquery 切换 LinkButton 的启用/禁用状态【英文标题】:Toggling enabled/disabled state of a LinkButton using jquery 【发布时间】:2012-10-21 05:20:20 【问题描述】:我有一个需要使用 jquery 启用或禁用的 LinkButton(最初禁用),但似乎使用我正在使用的方法禁用按钮会删除 href 属性,所以当我重新启用它时,按钮看起来已启用,但无法点击。
<asp:LinkButton Id="lbSave" runat="server" Text="Save" Enabled="False" ClientIDMode="Static" />
Disable:
$('#lbSave').attr('disabled', 'disabled');
Enable:
$('#lbSave').removeAttr('disabled');
启用/禁用链接按钮的正确方法是什么?
【问题讨论】:
FWIW 禁用锚客户端 不 与禁用服务器端相同(通过服务器端禁用呈现的 html 不同)您无法通过以下方式可靠地阻止锚操作设置 disabled 属性客户端,我建议使用不同类型的 html 元素或完全从锚中删除 href。 【参考方案1】:问题是客户端浏览器中控件的 ID 不是 lbSave
,但 WebForms 会将其分解为 ctl00_nameofanynestedaspnetcontainercontrols_morenestedcontainernames_lbSave.
Praveen 建议的解决方法是,不要尝试通过 id 查找控件,而是给它一个唯一的类名 - 网络表单不会破坏 - 瞧,问题就解决了。
另一种方法是让 asp.net 在您的标记中为您插入正确的 id:
启用: $('# lbSave.ClientID %>').attr('disabled', '');
禁用: $('# lbSave.ClientID %>').removeAttr('disabled');
(如果您使用的是 Asp.Net 4 WebForms,则此页面 http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx 为您提供了另一种更简单的解决方案)。
但是如果你在 Asp.Net 4 中做新项目,你真的很想使用 Asp.Net MVC,所有这些问题都会消失。
【讨论】:
这实际上不是问题,因为我有 ClientIDMode="Static" (为简单起见,这里没有包括,对此感到抱歉)。我的 jquery 代码能够找到我的链接按钮,所以那里没有问题。事实上,它确实会切换按钮的启用/禁用“外观”。问题是当它启用时,我仍然无法点击它,因为它已经失去了它的 href 属性。 完全同意 MVC 的评论。不幸的是,我正在处理一个较旧的项目。 明白了。您必须将 Enabled="False" 更改为 Enabled="True"。如果你试试这个: 您会看到 serverside enabled=false 的作用远不止设置 disabled 属性。要禁用该按钮,请先在客户端执行。【参考方案2】:您可以执行以下操作:
<asp:LinkButton Id="lbSave" runat="server" Text="Save" Enabled="False" CssClass="lbSave" />
禁用:
$(".lbSave").attr("disabled", "disabled");
启用:
$(".lbSave").removeAttr("disabled");
希望这有帮助!
【讨论】:
对不起,我刚刚意识到我在描述中颠倒了(现在编辑),但实际上你在这里发布的是我目前所拥有的。启用它不会放回 href。谢谢! 尝试将链接按钮的属性记录到控制台,或者只是在禁用前后做一个“警报”;这告诉我们确切的问题。我认为除了您在此处显示的 jquery 之外,还有其他问题。 查看源代码,当我将链接按钮设置为 Enabled=False 时,链接按钮没有 href 属性。所以 jquery 工作正常,因为它不知道 href 属性的开头。所以问题仍然存在,是否可以使用 jquery 切换 ASP.NET LinkButton 状态。 好的,想通了。我必须在页面加载时启用 LinkButton,使用 jquery 保存 href 属性,然后使用 jquery 禁用 linbutton。每次我重新启用时,我都必须把 href 放回去。感谢您的帮助。【参考方案3】:试试这个链接disable a hyperlink using jQuery
你可以试试
$('#').bind('click', false);
启用
$('#').unbind('click', false);
【讨论】:
【参考方案4】:在 ASP.NET LinkButton 上设置 Enabled=False 会删除 href 属性,因此 jquery 永远无法重新启用它。所以这里有一个适合我的解决方案:
In javascript:
$(document).ready(function()
_href = $('#lbSave').attr('href');
$('#lbSave').attr('disabled', 'disabled');
$('#lbSave').removeAttr('href');
);
Disable:
$('#lbSave').attr('disabled', 'disabled');
$('#lbSave').removeAttr('href');
Enable:
$('#lbSave').removeAttr('disabled');
$('#lbSave').attr('href', _href);
【讨论】:
以上是关于使用 jquery 切换 LinkButton 的启用/禁用状态的主要内容,如果未能解决你的问题,请参考以下文章
回发前在 Jquery LinkButton 中验证表单(使用 Html Validate)
asp.net LinkButton OnClick 未使用 href 触发
为啥 GridView 中的 LinkButton 不会引发其 OnClick 事件?
如何让任何 asp:LinkButton 看起来像一个按钮