使用JQuery禁用和启用所有超链接

Abs*_*Abs 6 javascript jquery

我有以下禁用所有超链接,但在事件后我想再次启用它们,我该怎么办呢?

$("a").click(function() { return false; });
Run Code Online (Sandbox Code Playgroud)

我不认为它只是简单地设置为真.;)

谢谢大家

Poi*_*nty 18

不要以这种方式绑定"click"处理程序,而是执行以下操作:

$('a').bind("click.myDisable", function() { return false; });
Run Code Online (Sandbox Code Playgroud)

然后,当您想要删除该处理程序时,这很容易:

$('a').unbind("click.myDisable");
Run Code Online (Sandbox Code Playgroud)

这样你就可以避免弄乱可能被"点击"的其他东西了.如果您只是取消绑定"单击",则解除绑定到该事件的所有内容.

在2014编辑 - 现在绑定事件的方式是.on():

$('a').on('click.myDisable', function() { return false; });
Run Code Online (Sandbox Code Playgroud)

可能这样做会更好:

$('a').on('click.myDisable', function(e) { e.preventDefault(); });
Run Code Online (Sandbox Code Playgroud)

解开:

$('a').off('click.myDisable');
Run Code Online (Sandbox Code Playgroud)

最后,您可以将处理程序绑定到文档正文并处理<a>动态添加的标记:

$('body').on('click.myDisable', 'a', function(e) { e.preventDefault(); });

// to unbind

$('body').off('click.myDisable');
Run Code Online (Sandbox Code Playgroud)


aef*_*fxx 5

试试这个:

// Better to use the live event handler here, performancewise
$('a').live('click', function() {... return false;});

// Now simply kill the binding like this
$('a').die('click');
Run Code Online (Sandbox Code Playgroud)

再见


use*_*716 5

绑定和取消绑定会花费一些开销。

另一种解决方案是添加一个类似的类disabled,然后用于hasClass('disabled')测试并查看它是否应该返回false

$('a').addClass('disabled');
$('a').click(function() {
    if($(this).hasClass('disabled'))
        return false;
});
Run Code Online (Sandbox Code Playgroud)