有人知道如何在jquery中禁用一个链接而不使用return false吗?

具体来说,我要做的是禁用一个项目的链接,使用jquery执行点击它触发一些东西,然后重新启用该链接,以便如果它再次单击它作为默认工作。

谢谢。 戴夫

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

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

当前回答

我知道这不是用jQuery,但你可以用一些简单的css禁用一个链接:

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

HTML看起来是这样的

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

其他回答

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

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

作为后端工程师,我花了一段时间来思考如何做到这一点,但下面是我如何解决完全相同的问题。

const resendCodeTimeOutPeriodInMs = 30000; // 30seconds.

function resend2faCodeOnLogin(sendByEmail) {

const resendCodeLinkElement = $('#resendCodeLink');

const disabledState = resendCodeLinkElement.attr('disabled');
if (disabledState === 'disabled') {
    resendCodeLinkElement.preventDefault();
} else {
    resendCodeLinkElement.attr("disabled", true);
    resendCodeLinkElement.addClass('disabled');

    submitForm('#twoFactorResendCodeForm', (response) => {
        setTimeout(function () {
            $('#resendCodeLink').removeClass('disabled');
            resendCodeLinkElement.attr("disabled", false);
        }, resendCodeTimeOutPeriodInMs); 

    }, (response) => {
        console.error(response);
    });
}
}

标准CSS摘自网络上著名的例子:

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

我的方法是确保一个给定的按钮在用户体验可以再次点击它之前被禁用30秒。

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

$('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>

现在你可以使用禁用属性链接

干杯!

只要触发东西,设置标志,返回false。如果设置了flag -什么都不做。

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

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

jQuery教程:

对于点击和大多数其他事件,您 可以防止默认行为- 点击链接,进入jquery。com -通过在事件处理程序中调用event. preventdefault ()

如果只希望在满足某个条件(例如隐藏了某些东西)时才使用preventDefault(),则可以使用扩展的类测试ul的可见性。如果它是可见的(即不隐藏),链接应该正常触发,因为If语句不会被输入,因此默认行为将不会被阻止:

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