HTML锚点标记是否应该声明已禁用的属性?

如果我创build一个HTML定位标记,并将disabled属性设置为true,我会在不同的浏览器中获得不同的行为(惊喜!)。

我创造了一个小提琴演示。

在IE9中,链接呈灰色,不会转移到HREF位置。 在Chrome / FF / Safari中,链接是正常的颜色,并将转移到HREF位置。

正确的行为应该是什么? IE9渲染不正确,我应该实现一些CSS和JavaScript来解决它; 或者是Chrome / FF / Safari不正确,最终会赶上?

提前致谢。

IE在这种情况下似乎是不正确的。

请参阅HTML5规范

禁用的IDL属性仅适用于样式表链接。 当链接元素定义样式表链接时,disabled属性的行为与替代样式表DOM的定义相同。 对于所有其他的链接元素,它总是返回false,并在设置上不做任何事

http://dev.w3.org/html5/spec/Overview.html#the-link-element

HTML4规范甚至没有提到disabled

http://www.w3.org/TR/html401/struct/links.html#h-12.2

编辑

我认为唯一能够跨浏览器获得这种效果的方法是js / css,如下所示:

 #link{ text-decoration:none; color: #ccc; } 

JS

 $('#link').click(function(e){ e.preventDefault(); }); 

例如: http : //jsfiddle.net/jasongennaro/QGWcn/

我必须在一个网站中修复这个问题,这个网站有很多根据其他条件使用这个属性被启用/禁用的锚。也许不是很理想,但是在这样的情况下,如果你不想修改每个锚的代码个别地,这将会为所有的锚点做好准备:

 $('a').each(function () { $(this).click(function (e) { if ($(this).attr('disabled')) { e.preventDefault(); e.stopImmediatePropagation(); } }); var events = $._data ? $._data(this, 'events') : $(this).data('events'); events.click.splice(0, 0, events.click.pop()); }); 

和:

 a[disabled] { color: gray; text-decoration: none; } 

disabled是仅适用于每个标准的 input元素的属性。 IE可能会支持它,但是如果你想要符合标准,你可以使用CSS / JS。

JQuery的答案没有为我工作,因为我的锚标记是在一个窗体上,在我的forms,我使用ASP领域的validation,他们只是没有打得好。 这导致我find一个非常简单的答案,不需要JQuery或CSS …

 <a id="btnSubmit" href="GoSomePlace">Display Text</a> 

您可以禁用该元素,它应该像inputtypes那样工作。 没有CSS需要。 这在铬和ff中为我工作。

 function DisableButton() { var submitButton = document.getElementById("btnSubmit"); if (submitButton != null) { submitButton.setAttribute('disabled', 'disabled'); } } 

当然你会做一个循环来禁用DOM中的所有锚点标记,但是我的例子显示了如何为一个特定的元素做到这一点。 你想确保你得到你的元素的正确的客户端ID,但这对我来说,不止一次。 这也适用于asp:LinkBut​​tons,它们在浏览器中呈现时最终成为锚标签元素。