【问题标题】:JQuery: Remove "OnClick" events from 'a' tagsJQuery:从“a”标签中删除“OnClick”事件
【发布时间】:2012-01-23 19:29:39
【问题描述】:

这是一个奇怪的问题。我们的内部网上有一些生产链接。一些 rouge javascript 在我们的 Intranet 主页上的所有链接上都返回“false”。

我们无权访问源代码来重新构建控件并修复此 javascript。

因此,作为临时创可贴,我想使用 jquery 移动链接上的所有“onClick”事件

现在的链接是这样的:

<a href="https://www.mysite.com/" onclick="AddHit('Header: mysite.com', 'http://www.mysite.com'); return false;" title="Mysite Home">www.Mysite.com</a>

我想编写一些 jquery 来使用“onclick='AddHit...”代码。

【问题讨论】:

标签: jquery


【解决方案1】:

你可以试试这个:

$("a").removeAttr("onclick");

编辑根据 cmets 和 jquery Docs 更新答案:

注意:使用 .removeAttr() 删除内联 onclick 事件处理程序在 Internet Explorer 6、7 或 8 中无法达到预期的效果。为避免潜在问题,请改用 .prop()

最好的方法:

$("a").prop("onclick", null);

【讨论】:

  • 更好:$('...').prop('onclick',null).off('click');检查stackoverflow.com/a/1687805/3063226
  • 看起来即使没有 .off('click') 也能正常工作,.prop('onclick',null) 至少对于 IE11 来说已经足够了。
【解决方案2】:

从所有拥有该属性的链接中移除该属性:

$('a[onclick]').removeAttr('onclick');

【讨论】:

    【解决方案3】:

    根据 JQuery 文档,您应该使用 .prop() 删除内联 onclick,因为这可以避免 Internet Explorer 6、7 或 8 中的问题。

    试试这个

    $element.prop("onclick", null);
    

    我需要在第一次点击后删除标签的 onclick,所以这就是我所做的:

    onclick="$(this).prop('onclick', null);"
    

    希望对你有帮助

    【讨论】:

    • 到目前为止,这是唯一正确的答案。使用 jQuery,.removeAttr().unbind() 都不会安全地删除某些 Internet Explorer 版本中的内联 onclick 事件处理程序。见.removeAttr()
    【解决方案4】:

    你可以这样做;

    $('a[onclick]').removeAttr('onclick');
    

    【讨论】:

      【解决方案5】:
      $(function(){
          $('a[onclick*="AddHit"]').removeAttr('onclick');
      }
      

      这将删除所有这些,但您要确保不会将其从不需要的链接中删除。很多东西都与 onclick 属性挂钩,如果你有一个类,你可以在删除之前验证或者 onclick 的内容会更好。不愿看到整个站点停止工作,因为没有调用所需的 JS。这将使用 onclick 中的 AddHit 功能删除任何 onclick,以确保您更安全。

      【讨论】:

        【解决方案6】:

        这将删除所有具有以“AddHit(”开头的onclick 值的链接的onclick 属性(其他链接保持不变)。

        $('a[onclick^="AddHit("]').removeAttr("onclick");
        

        【讨论】:

          【解决方案7】:

          未经测试,但我认为这应该可行:

          $(document).ready(function(){
              $('a').removeAttr("OnClick");
          });
          

          更多信息:http://api.jquery.com/removeAttr/

          【讨论】:

          • 来自同一页面:“使用 .removeAttr() 删除内联 onclick 事件处理程序在 Internet Explorer 6、7 或 8 中无法达到预期效果。为避免潜在问题,请使用 @ 987654325@ 改为:$element.prop("onclick", null);"
          【解决方案8】:

          请记住这一点,如果您的“onclick”属性为 ONLINE 并且在类似(引导)的 MODAL 中

          像这样:(模态)

          <a id="myDiv" href="#" onclick="doSomething();">Click here !</a>
          

          ->请提及&lt;body&gt;标签!

          在 jQuery 中(在第一个选择器中使用正文):

          $('body #myDiv').prop('onclick', null);
          

          我搜索了几个小时......

          【讨论】:

            【解决方案9】:

            您可以使用 CSS 指针事件属性。这设置了一个元素是否应该对指针事件做出反应。设置“none”禁用点击,设置“auto”启用。

            $('a').css('pointer-events','none');

            【讨论】:

              【解决方案10】:

              使用.unbind() 方法或off() 摆脱它。

              【讨论】:

              • 我相信这将删除通过 jQuery 或 addEventListener() 添加的事件处理程序,但不会删除内联 onClick 事件处理程序。 – 贾斯珀
              猜你喜欢
              • 2011-05-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-31
              • 2023-02-07
              • 2020-11-26
              相关资源
              最近更新 更多