jQuery禁用链接


284

任何人都知道如何在没有使用的情况下禁用jquery中的链接return false;吗?

具体来说,我要执行的操作是禁用项目的链接,使用触发某些内容的jquery对它执行单击,然后重新启用该链接,以便再次单击该链接即可将其作为默认设置。

谢谢。戴夫

更新 这是代码。.expanded应用该类后,需要做的是重新启用禁用的链接。

$('ul li').click(function(e) {
    e.preventDefault();
    $('ul').addClass('expanded');
    $('ul.expanded').fadeIn(300);
    //return false;
});

7
为什么要求不使用return false?使用它,然后在不再使用事件处理程序时将其删除(或在其中添加条件,以根据所提及的“某些内容”的状态返回不同的值)。
昆汀2009年

您是否只是在对链接执行相同的单击操作之前进行一些预处理?即,您不是建议两次单击,而是建议用户单击链接,发生一些操作,然后单击链接?
拉撒路2009年

否则,您能否解释为什么采用这种方法,因为更好地理解问题空间将改善答案。
拉撒路2009年

@lazarus,我建议在同一链接上点击2次。1首先做一些事情,然后第二个将链接视为链接。
davebowker,2009年

@daviddorward,到目前为止,我尝试过返回false,它一直进行到目标的第二部分,即不允许第二次单击通过。如果您能写一个简短的例子,我将不胜感激。
davebowker,2009年

Answers:


364
$('#myLink').click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});

这样可以防止超链接的默认行为,即访问指定的href。

从jQuery 教程中

对于click和大多数其他事件,您可以通过在事件处理程序中调用event.preventDefault()来防止默认行为-在此处,链接到jquery.com-

如果你想preventDefault()只有当某个条件满足(东西隐藏例如),你可以用类测试UL的知名度扩大。如果可见(即未隐藏),则该链接应照常触发,因为不会输入if语句,因此不会阻止默认行为:

$('ul li').click(function(e) {
    if($('ul.expanded').is(':hidden')) {
        e.preventDefault();
        $('ul').addClass('expanded');
        $('ul.expanded').fadeIn(300);
    } 
});

3
使用jQuery 1.7+,您可以使用开/关:stackoverflow.com/questions/209029/…–
Lance Cleveland

如果它具有href和onclick,则可以使用$(“#myLink”)。attr('onclick','').click(function(e){e.preventDefault();});
罗纳德·麦当劳

通过ajax和jquery实现,我可以隐藏具有回调的href购买,以防止刮板获取这些链接。很好,谢谢!
Cesar Bielich 2015年

这篇文章是使用bootstrap的最简单方法,希望对您有所帮助。
shaijut

107

尝试这个:

$("a").removeAttr('href');

编辑-

从更新的代码中:

 var location= $('#link1').attr("href");
 $("#link1").removeAttr('href');
 $('ul').addClass('expanded');
 $('ul.expanded').fadeIn(300);
 $("#link1").attr("href", location);

3
使用href播放非常好,因为它是禁用链接的一种快速方法,该链接通过onclick事件执行操作。非常非常聪明!
daitangio

甜美的方法来从加入#在URI内做时,请注意浏览器href="#"
阿贝拉

65

对于像我这样通过Google来到这里的其他人-这是另一种方法:

css:
.disabled {
  color: grey; // ...whatever
}

jQuery:
$('#myLink').click(function (e) {
  e.preventDefault();
  if ($(this).hasClass('disabled'))
    return false; // Do something else in here if required
  else
    window.location.href = $(this).attr('href');
});

// Elsewhere in your code
if (disabledCondition == true)
  $('#myLink').addClass('disabled')
else
  $('#myLink').removeClass('disabled')

记住:不仅这是一个CSS类

class =“ buttonstyle”

而且这两个

class =“ buttonstyle disabled”

因此您可以轻松地使用jQuery添加和删除其他类。无需触摸href ...

我爱jQuery!;-)


2
这假设链接没有目标:)
dstarh 2012年

2
与其做所有这些花哨的事情,不如不只是将dom上的onclick固定在上面,而是使用它on()来过滤所有a.disabled链接并防止出现默认设置。然后,您要做的就是打开/关闭禁用的类,并且在“启用”时链接将自行处理。
CodeChimp

不需要“ == true”-无论如何,addClass('disabled')都会运行。 if(disabledCondition)
Fox Wilson

1
@fwilson,虽然您完全正确,但是对于初学者来说,使用起来更容易理解== true。:)
carmenism

有什么特殊的理由不简化为if ($(this).hasClass('disabled')) { e.preventDefault(); }
和平号”,

58

这是替代的css / jQuery解决方案,由于其简洁和最小化的脚本,我更喜欢它:

CSS:

a.disabled {
  opacity: 0.5;
  pointer-events: none;
  cursor: default;
}

jQuery的:

$('.disableAfterClick').click(function (e) {
   $(this).addClass('disabled');
});

7
来自Mozilla的文章:“警告:在CSS中将指针事件用于非SVG元素是实验性的。该功能曾经是CSS3 UI草案规范的一部分,但由于存在许多未解决的问题,已推迟到CSS4。”
Duelin markers'Mar

1
那是一个很好的考虑,但是它恰好在大多数现代浏览器中都能很好地工作。
彼得·德威斯

您可能要考虑.prop("tabindex", "-1");addClass
Oleg Grishko(

19

您可以按照以下步骤删除点击链接;

$('#link-id').unbind('click');

您可以通过以下方式重新启用链接,

$('#link-id').bind('click');

您不能将'disabled'属性用于链接。


1
与其他人相比,易于开启和关闭。
python1981 2015年

2
“不能将'disabled'属性用于链接。” 想知道为什么按钮和禁用链接之间没有一致性。“禁用”也应适用于链接。这就像说,对于雪佛兰汽车,您必须踩下制动踏板才能停止,但是对于这家其他汽车制造商,则必须使用位于车顶上的杠杆。
eaglei22 '17

14

如果您使用href路线,可以将其保存

禁用:

$('a').each(function(){
    $(this).data("href", $(this).attr("href")).removeAttr("href");
});

然后使用以下命令重新启用:

$('a').each(function(){
    $(this).attr("href", $(this).data("href"));
});

在一种情况下,我必须这样做,因为单击事件已经绑定在其他位置,并且我无法控制它。


12

我总是在jQuery中使用它来禁用链接

$("form a").attr("disabled", "disabled");

您也可以使用$("form a").attr("disabled", false);,使其再次启用
亚历山大Ryhlitsky

9

html链接示例:

        <!-- boostrap button + fontawesome icon -->
        <a class="btn btn-primary" id="BT_Download" target="blank" href="DownloadDoc?Id=32">
        <i class="icon-file-text icon-large"></i>
        Download Document
        </a>

在jQuery中使用它

    $('#BT_Download').attr('disabled',true);

将此添加到css:

    a[disabled="disabled"] {
        pointer-events: none;
    }

1
我以前从未遇到过这个CSS属性,但是对我来说,这是迄今为止禁用超链接的最简单方法。这样做的好处是,当pointer-events: none从锚元素中删除包含该属性的类时,它们将恢复为单击之前的操作。因此,如果它们是基本的超链接,它们将还原为导航到其href属性中的URL ,并且如果设置了click事件处理程序,则该链接将再次变为活动状态。比保存href值和单击处理程序简单得多。
菲利普·斯特拉特福德

我喜欢这种解决方案,这是最简单的解决方案。
路易斯

当无济于事的“解决方案”(几乎放弃了这条路线)时,来到了这个宝座。这是一个轻松的解决方案。而且是唯一真正起作用的产品。荣誉
user12379095

5

我最喜欢“在结帐时签出以编辑项目并防止-狂野的西部点击到任何地方-”功能

$('a').click(function(e) {
    var = $(this).attr('disabled');
    if (var === 'disabled') {
        e.preventDefault();
    }
});

因此,如果我希望如上所述在“编辑模式”下禁用第二个操作工具栏中的所有外部链接,我将添加编辑功能

$('#actionToolbar .external').attr('disabled', true);

火灾后的链接示例:

<a href="http://goo.gl" target="elsewhere" class="external" disabled="disabled">Google</a>

现在您可以将禁用的属性用于链接

干杯!


3

您应该在这里找到答案。

感谢@Will和@Matt提供的这种优雅的解决方案。

jQuery('#path .to .your a').each(function(){
    var $t = jQuery(this);
    $t.after($t.text());
    $t.remove();
});



1

unbind()已在中弃用jQuery 3,请改用off()方法:

$("a").off("click");

0

我知道这不是jQuery的,但是您可以使用一些简单的CSS禁用链接:

a[disabled] {
  z-index: -1;
}

HTML看起来像

<a disabled="disabled" href="/start">Take Survey</a>

0

这适用于将onclick属性设置为嵌入式的链接。这也使您以后可以删除“ return false”以将其启用。

        //disable all links matching class
        $('.yourLinkClass').each(function(index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", "return false; " + OnClickValue);
        });

        //enable all edit links
        $('.yourLinkClass').each(function (index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", OnClickValue.replace("return false; ", ""));
        });

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.