如何使锚点链接不可点击或被禁用?


89

我有一个锚链接,一旦用户单击它,我想禁用它。或者,从文本周围删除锚标记,但绝对要保留文本。

<a href='' id='ThisLink'>some text</a>

通过添加按钮,我可以轻松地做到这一点,.attr("disabled", "disabled");
我已经成功添加了disabled属性,但是该链接仍然是可单击的。
我不在乎文本是否带有下划线。

有什么线索吗?

当您单击错误的音乐家时,它应该只添加“错误”,然后变得不可点击。
当您单击正确时,它应该添加“ Awesome”,然后禁用所有<a>标签。


删除href部分并添加到CSS:“ cursor:pointer”,我假设您有一个$('#ThisLink')。click或类似的东西?
宙斯记

1
$(“#ThisLink”)。parent()。find(“ a”)。remove();
亚当·霍尔姆斯

亚当,这个解决方案几乎可行。不过,它会删除a标签内的所有文本。
艾维克·詹姆斯

Answers:


12

我刚意识到你要的是(我希望)。这是一个丑陋的解决方案

var preventClick = false;

$('#ThisLink').click(function(e) {
    $(this)
       .css('cursor', 'default')
       .css('text-decoration', 'none')

    if (!preventClick) {
        $(this).html($(this).html() + ' lalala');
    }

    preventClick = true;

    return false;
});

实际上,这实际上可以解决问题,例如...代替.click,在主体上使用.on并将其委托给'a [disabled]'。然后使用相同的选择器将css代码放入实际的css中。然后,防止单击就像event.preventDefault()一样简单,然后返回false
lassombra

2
不同意,使用CSS“ pointer-events:none;” 相反,就像其他保持不变的人一样。
vitrilo

200

最干净的方法是在要禁用单击时添加一个指针事件为:none的类。它的功能类似于普通标签。

.disableClick{
    pointer-events: none;
}

19
使用此想法,一个更简单的方法是使用[disabled]作为CSS的选择器,因此您无需将.disableClick类添加到锚点
Ferran Salguero 2013年

15
不过要小心,你仍然可以选项卡,事情指针的事件中被禁用:无
迈克·梅勒

在现代浏览器中,该解决方案对我来说是很好的。我有可用的锚标记,这些锚标记绑定到click事件,并阻止垃圾邮件在事件处理过程中发挥作用,因此我以编程方式将其添加,然后在处理完成后将其删除。在我的情况下,选择禁用的锚标记也不是问题,但可能是其他问题。YMMV
Stephen Tetreault

2
使用pointer-events:none还将禁用cursor,标题文本和其他鼠标悬停事件。
基思(Keith)

该值none指示鼠标事件“通过”该元素并定位该元素“之下”的任何内容。 developer.mozilla.org/en-US/docs/Web/CSS/pointer-events 在某些布局上可能是个问题
user2988142 '18

33
<a href='javascript:void(0);'>some text</a>

8
请说明您的解决方案,以便将来对此问题的访问者了解如何解决当前的问题。
War10ck

3
来自:MDN:无效运算符。当浏览器遵循a时javascript: URI,它将评估URI中的代码,然后用返回的值替换页面的内容,除非返回的值为undefined。该void操作符可以用来恢复undefined。例如: <a href="javascript:void(0);"> Click here to do nothing </a> 注意,javascript:伪协议不推荐使用其他协议,例如不引人注目的事件处理程序。
列宁

28

使用指针事件 CSS样式。(如Jason MacDonald所建议的)

参见MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events。大多数浏览器都支持它。

如果您具有如下所示的全局CSS规则,只需将简单的“ disabled”属性添加到锚即可:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
+1用于通过[disabled]属性(而不是类)添加样式。应该指出的是指针事件:无;不适用于IE11之前的版本。
丹尼尔·托农

默认情况下,所有IE都有自己的专有逻辑,即禁用锚,按钮甚至其他元素。非IE浏览器需要这种解决方法。
vitrilo

3
+1。只是这样,我下次不必再次查找:所需的javascript(使用jQuery)为$("#elementid").attr("disabled", "disabled");。将其包含cursor: default在CSS中也可能有所帮助(如Muhammad Nasir所建议)。
ASL

元素没有禁用的属性,将其用作选择器可能会起作用,也可能不会起作用。
RobG '17年

1
直观-好的解决方案。我实际上很惊讶地发现<a />元素没有禁用的属性-看起来很奇怪。
Morvael


10

Bootstrap为我们提供.disabled课程。请使用它。

但是,.disabled仅当'a'标签已经具有类'btn'时,类才起作用。它不适用于任何旧的'a'标签。该btn班可能无法在某些情况下是合适的,因为它有风格的内涵。在幕后,.disabled该类设置pointer-eventsnone,因此您可以使CSS做与Saroj Aryal和Vitrilo相同的事情。(谢谢Les Nightingill的建议)。


3
.disabled类仅在'a'标签已经具有类'btn'时起作用。它不适用于任何旧的'a'标签。'btn'类在某些情况下可能不合适,因为它具有样式含义。在幕后,.disabled类将指针事件设置为none,因此您可以使css做与Saroj Aryal和Vitrilo相同的事情。
Les Nightingill

感谢您的详细评论。它为许多用户澄清了很多。我可以使用您评论中的一些文字来扩展我的答案吗?
Yevgeniy Afanasyev

9

添加css课程:

.disable_a_href{
    pointer-events: none;
}

添加jquery

$("#ThisLink").addClass("disable_a_href"); 

5

只需href从定位标记中删除该属性即可。


2
在某些浏览器中,删除href只是将href设置为/或当前页面。
多项式

我想这应该是第一种方法
巴斯Slagter

5

最好的方法是阻止默认操作。对于定位标记,默认行为是重定向到href指定地址。

因此,以下javascript在这种情况下效果最佳:

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

4

您可以使用onclick事件来禁用click操作:

<a href='' id='ThisLink' onclick='return false'>some text</a>

或者,您可以只使用<a>标签以外的其他东西。


您可以将其与text-decoration: none和组合使用,.disabledLink { color: #000 !important; }以使其看起来像普通文本。
多项式

1
令人讨厌的javascript是一个糟糕的解决方案。
jahrichie 2013年

4

杰森·麦克唐纳(Jason MacDonald)的评论对我有用,并在Chrome,Mozila和IE中进行了测试。

添加了灰色以显示禁用效果。

.disable_a_href{
    pointer-events: none;
    **color:#c0c0c0 !important;**
}

jQuery仅选择锚列表中的第一个元素,添加了元字符(*)以选择和禁用所有id为的元素#ThisLink

$("#ThisLink*").addClass("disable_a_href"); 

4

编写这行jQuery代码

$('.hyperlink').css('pointer-events','none');

如果你想在css文件中写

.hyperlink{
    pointer-events: none;
}

3

在样式表中创建以下类:

  .ThisLink{
           pointer-events: none;
           cursor: default;
    }

将此类添加到您的动态链接,如下所示。

 <a href='' id='elemID'>some text</a>

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>

这与Jason MacDonald的答案有何不同?
所有工人都是必不可少的



1

这是我以前禁用的方法,希望能有所帮助。

$("#ThisLink").attr("href","javascript:;");

1
这是简单易用的解决方案,应该接受!
SI 8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

这是另一种实现方法,return false单击会添加带有的处理程序,该处理程序将禁用链接。


-4

最简单的方法

在您的html中:

<a id="foo" disabled="true">xxxxx<a>

在您的js中:

$('#foo').attr("disabled", false);

如果您将其用作属性可以完美工作


3
disable是<a>标签的无效属性
Josepas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.