【问题标题】:Prevent onclick event of appended element?防止附加元素的onclick事件?
【发布时间】:2018-06-25 15:49:38
【问题描述】:

我有一个页面,其中一些 onclick 代码被添加到附加元素中,我想阻止 onclick 代码触发。

这是我尝试过的:

$(function() {
  $('.container').append('<div class="appended" onclick="alert(\'DONT DISPLAY\')">CLICK ME</div>');
  
  // Prevent onclick
  $(document).on('click', '.appended', function (e) {
    e.preventDefault();
    return false;
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container"></div>

不幸的是,这并没有阻止 onclick 的行为。

EDIT 应该提到这一点,但我无权访问将 onclick 事件添加到 HTML 的代码,但如果可能,我愿意删除该属性事后对附加元素执行此操作。

【问题讨论】:

  • 同时添加event.stopPropagation(),这样事情就不会冒泡了。
  • @nurdyguy 冒泡不是问题

标签: jquery append preventdefault


【解决方案1】:

一种选择是使用removeAttr() 删除onclick 属性

$('.container').append('<div class="appended" onclick="alert(\'DONT DISPLAY\')">CLICK ME</div>');

$('.appended').removeAttr('onclick');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container"></div>

文档:removeAttr()

【讨论】:

    【解决方案2】:

    为此,您需要调用 removeAttr() 并删除 onclick 属性:

    var $div = $('<div class="appended" onclick="alert(\'DONT DISPLAY\')">CLICK ME</div>').removeAttr('onclick');
    $('.container').append($div);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="container"></div>

    更好的是,将它从您实际附加的 HTML 字符串中删除 - 假设您可以控制它。

    【讨论】:

    • 很遗憾,我无法访问添加 onclick 事件的代码,抱歉,应该提到这一点。
    • 那么至少sn-p中的代码对你有用:)
    • 哈哈,谢谢,我会投赞成票,因为你花时间回答,我还不够清楚。
    • 没问题,很高兴为您提供帮助。不过要明确一点,即使您在问题中进行了编辑说明,我发布的代码仍然可以使用。
    • 它确实有效,谢谢。我只需要将removeAttr 部分分开
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2013-08-26
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多