jQuery禁用链接

dav*_*ker 276 jquery hyperlink

任何人都知道如何在jquery中禁用链接而不使用return false;

具体来说,我正在尝试做的是禁用项目的链接,使用jquery执行点击它,触发一些东西,然后重新启用该链接,这样如果再次点击它就会默认工作.

谢谢.戴夫

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

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

kar*_*m79 357

$('#myLink').click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});
Run Code Online (Sandbox Code Playgroud)

这将阻止超链接的默认行为,即访问指定的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);
    } 
});
Run Code Online (Sandbox Code Playgroud)

  • 使用jQuery 1.7+,您可以使用开/关:http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery (3认同)

TSt*_*per 105

试试这个:

$("a").removeAttr('href');
Run Code Online (Sandbox Code Playgroud)

编辑-

从您更新的代码:

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

  • 使用href是非常好的,因为它是一种快速的方法来消除通过onclick事件执行操作的链接.非常非常聪明! (3认同)

Hei*_*ein 64

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

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')
Run Code Online (Sandbox Code Playgroud)

记住:不仅这是一个css类

类= "的ButtonStyle"

还有这两个

class ="buttonstyle disabled"

所以你可以使用jQuery轻松添加和删除更多类.无需触摸href ...

我喜欢jQuery!;-)

  • 这假设链接没有目标:) (2认同)
  • 为什么不直接在dom中更高的onclick,使用`on()`来过滤所有`a.disabled`链接并防止默认,而不是做所有这些花哨.然后,你所要做的就是打开/关闭禁用的类,当"启用"时链接将自动处理. (2认同)

Pet*_*ese 55

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

CSS:

a.disabled {
  opacity: 0.5;
  pointer-events: none;
  cursor: default;
}
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$('.disableAfterClick').click(function (e) {
   $(this).addClass('disabled');
});
Run Code Online (Sandbox Code Playgroud)

  • [来自Mozilla](https://developer.mozilla.org/en/CSS/pointer-events):"警告:在非SVG元素的CSS中使用指针事件是实验性的.该特征曾经属于CSS3 UI草案规范,但由于许多未解决的问题,已被推迟到CSS4." (7认同)
  • 丢失了两个分号!Tsk tsk :)周末愉快. (2认同)

Kai*_*ane 19

您可以通过以下方式删除点击链接;

$('#link-id').unbind('click');
Run Code Online (Sandbox Code Playgroud)

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

$('#link-id').bind('click');
Run Code Online (Sandbox Code Playgroud)

您不能将"禁用"属性用于链接.

  • "你不能使用'禁用'属性来获取链接." 不知道为什么按钮和禁用链接之间没有一致性."禁用"也适用于链接.这就像说雪佛兰汽车你必须踩刹车踏板才能停下来,但是对于这个其他汽车制造商来说,你必须使用位于车顶上的这个杠杆. (2认同)

jBe*_*ger 14

如果你去了href路线,你可以保存它

要禁用:

$('a').each(function(){
    $(this).data("href", $(this).attr("href")).removeAttr("href");
});
Run Code Online (Sandbox Code Playgroud)

然后重新启用使用:

$('a').each(function(){
    $(this).attr("href", $(this).data("href"));
});
Run Code Online (Sandbox Code Playgroud)

在一个案例中,我必须这样做,因为点击事件已经绑定在其他地方,我无法控制它.


mat*_*tox 10

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

$("form a").attr("disabled", "disabled");
Run Code Online (Sandbox Code Playgroud)


Ch'*_*cos 6

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>
Run Code Online (Sandbox Code Playgroud)

在jQuery中使用它

    $('#BT_Download').attr('disabled',true);
Run Code Online (Sandbox Code Playgroud)

将此添加到css:

    a[disabled="disabled"] {
        pointer-events: none;
    }
Run Code Online (Sandbox Code Playgroud)

  • 我以前从未遇到过这个 CSS 属性,但对我来说,这是迄今为止禁用超链接的最简单方法。它的美妙之处在于,当您从锚元素中删除包含“pointer-events: none”属性的类时,它们将恢复为以前单击时所做的任何操作。因此,如果它们是基本的超链接,它们将恢复导航到“href”属性中的 URL,并且如果它们设置了单击事件处理程序,则该处理程序将再次激活。比保存“href”值和点击处理程序简单得多。 (2认同)

Lah*_*zar 5

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

$('a').click(function(e) {
    var = $(this).attr('disabled');
    if (var === 'disabled') {
        e.preventDefault();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

$('#actionToolbar .external').attr('disabled', true);
Run Code Online (Sandbox Code Playgroud)

火灾后的链接示例:

<a href="http://goo.gl" target="elsewhere" class="external" disabled="disabled">Google</a>
Run Code Online (Sandbox Code Playgroud)

现在您可以对链接使用禁用属性

干杯!