ASP.NET linkbutton enabled=false 在 Firefox 中不起作用

ASP.NET linkbutton enabled=false does not work in Firefox

我想禁用 ASP.NET linkbutton。我想要的是一种浏览器不允许我单击 link 按钮或至少不执行相关操作的解决方案。

我使用 WebForms 在 HTML 标记上执行以下操作:

 <asp:LinkButton
       id="link1"
       text="Some button"
       runat="server"
       Enabled ="false"
 />

我使用 jQuery 事件触发 link 按钮操作:

$('#link1').click(function (evt) {
    // Do something here
    return false;
});

如果我在后面的代码中禁用它,结果是一样的:

this.link1.Enabled = false;

不清楚您的简化中是否遗漏了它,但由于按钮客户端 ID 的更改,您的 jQuery 似乎不会执行。您将需要执行以下任一操作:

在您的控件上将 ClientIDMode 设置为 static ...

确保 id 保持为 link1 以便在您的客户端代码中使用。

<asp:LinkButton
    id="link1"
    text="Some button"
    runat="server"
    Enabled ="false"
    ClientIDMode="static"
    />

或者,在运行时获取 jQuery 中控件的 ID ...

尽管这仅在您的 jQuery 在同一个 Web 表单页面而不是外部 JS 中时有效。

$('#<%= link1.ClientID %>').click(function (evt) {
    // Do something here
    return false;
});

随便你选择...

如果链接正确,您可以使用 jQuery 的 preventDefault() 方法来禁用 post 返回触发。

$('#link1').click(function (evt) {
    evt.preventDefault();
    // Do something here
});

禁用链接按钮不会阻止单击它。在我的测试中,禁用的链接按钮呈现如下:

<a class="aspNetDisabled">test</a>

jQuery 会愉快地将点击事件附加到该锚标记。您需要阻止事件触发,或更改代码,使其仅在启用按钮时执行您的操作。

这是一个可能的解决方法,它只会在启用按钮时执行您的 js:

$('#link1').click(function (evt) {
    if('<%=link1.Enabled%>' === 'True') {
      // Do something here
    }
    return false;
});

即使客户端触发禁用按钮,if语句也会导致Do something here不运行。