【问题标题】:Disable (and re-enable) the href and onclick on elements禁用(并重新启用)href 和 onclick 元素
【发布时间】:2011-01-07 13:26:29
【问题描述】:

我只想在元素(a 或 div)上启用/禁用 onclick 和 href。

我不知道该怎么做。

我可以通过在 click 事件上添加处理程序来禁用 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 属性?
  • 好的,抱歉 ;) 我只是希望能够(通过单击按钮)禁用/启用元素(div 或 a)上的所有链接(单击或 href)

标签: javascript jquery javascript-events


【解决方案1】:

如果您在 onclick 事件中返回 false,则 href 将被忽略。

  1. 这将转到 Goole:<a href="http://www.google.com" onclick="alert('Go to Google')">Test</a>

  2. 这不会转到 Google:&lt;a href="http://www.google.com" onclick="alert('Go to Google'); return false;"&gt;Test&lt;/a&gt;

【讨论】:

  • 第二行应该是:google.com" onclick="alert('Go to Google');return false;">Test
【解决方案2】:

好的,我找到了一种解决方法:在包含我想要禁用的所有元素的主 div 上放置一个覆盖层。 它只是工作。

【讨论】:

  • 或者使用 $("#divId").hide(); $("#divId").show();谢谢你的想法;)
【解决方案3】:

您可以尝试以下方法:

$('a, div').click(
    function(e){
    return false;
        // cancels default action *and* stops propagation

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

MDC documentation for preventDefault, jQuery documentation for event.preventDefault.

SO question: JavaScript event.preventDefault vs return 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 处理程序?
【解决方案4】:

试试这个禁用点击:

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

【讨论】:

    【解决方案5】:

    您可以将href 属性直接设置为"" 以防止原件显示在状态栏中,如果您要这样做的话。

    $(this).unbind().click(function(event){
         event.preventDefault();
    }).attr("href", "");
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 2017-12-21
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多