禁用(和重新启用)元素上的href和onclick

5

我想要启用/禁用元素(a或div)上的onclick和href属性。

我不知道如何做到这一点。

我可以通过添加单击事件处理程序来禁用onclick,但是href仍然可用。

 
$(this).unbind().click(function(event){
     event.preventDefault();
     return;
});

编辑:找到了一个元素的黑客


if ($(this).attr("href")) {
     $(this).attr("x-href", $(this).attr("href"));
     $(this).removeAttr("href");
}

这是一个非常模糊的问题。你到底想做什么?也要删除 href 属性吗? - Klemen Slavič
好的,抱歉;)我只想通过点击按钮来禁用/启用所有元素(div或a)上的所有链接(click或href)。 - jibees
5个回答

6
如果您在 onclick 事件中返回 false,则 href 将被忽略。
  1. 这会前往 Google:<a href="http://www.google.com" onclick="alert('前往 Google')">测试</a>

  2. 这不会前往 Google:<a href="http://www.google.com" onclick="alert('前往 Google'); return false;">测试</a>


第二行应该是:<a href="http://www.google.com" onclick="alert('Go to Google');return false;">测试</a> - pauldendulk

5

好的,我找到了一个解决方法:在包含所有要禁用的元素的主div上放置一个覆盖层..这样就可以了。


或者使用$("#divId").hide(); $("#divId").show(); 謝謝您的想法 ;) - razvanone

2
您可以尝试以下方法:
$('a, div').click(
    function(e){
    return false;
        // cancels default action *and* stops propagation

    // or e.preventDefault;
       // cancels default action without stopping propagation
});

Here is the translated text:

MDC文档中的preventDefault, event.preventDefault的jQuery文档

SO问题:JavaScript中的event.preventDefaultreturn false有何区别?

我不确定“href仍然可用”的问题,因为click事件被取消了;但是如果您想要从a元素中删除href

$('a[href]').attr('href','#');

将会删除它们(或者说,用#替换URL)。


根据OP的评论(问题),进行编辑:

好的,抱歉 ;) 我只想通过点击一个按钮,禁用/启用所有元素(div或a)上的所有链接(单击或href)

$('#buttonRemoveClickId, .buttonClassName').click(
function() {
    $('a, div').unbind('click');
});
$('#buttonReplaceClickId, .buttonOtherClassName').click(
function() {
    $('a, div').bind('click');
});

我已经找到了一个解决方案,可以针对a元素(将href值放入x-href属性中以重新启用它)。 但是如何重新启用onclick处理程序? - jibees

1

尝试使用以下代码禁用点击:

$(this).unbind('click');


0
你可以直接将 href 属性设置为 "",这样可以防止原始链接出现在状态栏中,如果这就是你想要的。
$(this).unbind().click(function(event){
     event.preventDefault();
}).attr("href", "");

否则,event.preventDefault() 已经阻止了链接的可点击性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接