从通过AJAX动态添加的内容中取消绑定所有事件

时间:2015-03-26 12:26:26

标签: jquery events asynchronous unbind

请先阅读本部分
事实证明我的问题是有人使用onclick="some javascript",我的所有事件塞子都没有抓住。

如果这是一个社区维基帖,我没有找到关于此主题的任何信息?


我有动态加载内容的内容,我想取消绑定事件:

init 上的代码示例

<div id="Wrap"></div>

通过AJAX加载内容后的代码示例

<div id="Wrap">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>

我想要的是什么:

  • .item可以有任何事件
  • 该项目是通过AJAX
  • 动态加载的
  • 必须取消绑定所有事件,并将其替换为一个(&lt; - 这没有问题)

我有什么

$(document).ready( handleWriteDisableds ); 

$(window).load( handleWriteDisableds ); // in doc ready

$( document ).ajaxComplete( handleWriteDisableds );


function handleWriteDisableds(){
    $('.item').unbind() // remove all events set in doc-ready

    $(document).on('click', '.item', function(e){
        e.preventDefault();  // prevent default behaviour
        e.stopPropagation(); // Don't bubble up
        alert('no can do');
        return false; // hardcore stopping stuff
    }); 
}

我需要什么:
在动态加载后取消绑定一切。

编辑哦,原来我们有人使用了onclick属性,那些显然不会被停止。如果我有更多信息,我会更新

2 个答案:

答案 0 :(得分:3)

尝试使用jQuery off()函数删除附加到动态添加元素的事件。 jQuery off()

在ajax成功回调中添加此内容。

   $('.item').off(); // with no arguments removes all handlers attached to the elements.

答案 1 :(得分:2)

试试这个。它可以帮助您快速解决这个问题。它将解除所有事件的束缚。


修改

动态添加的项目将不具有处理程序 - 即,在您的情况下,除非您重新绑定处理程序,否则新添加的具有“.item”的DOM将不起作用。那么,如果你是动态添加内容(通过AJAX),那么你的动态内容如何获得附加的处理程序?

你需要弄清楚它是如何获得动态内容的处理程序的。

默认情况下,动态添加的内容没有任何处理程序绑定到它。


$(function() {

  $(document).on('click', '.item', function(e) {
    e.unbind();
    alert('no can do')
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Wrap">
  <div class="item">Dynamic Content 1</div>
  <div class="item">Dynamic Content 2</div>
  <div class="item">Dynamic Content 3</div>
</div>