首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery空函数和事件处理程序

问jquery空函数和事件处理程序
EN

Stack Overflow用户
提问于 2012-07-23 16:39:25
回答 3查看 4.9K关注 0票数 6

在"empty“函数(http://api.jquery.com/empty/)的jquery文档中,有以下语句:

代码语言:javascript
复制
"To avoid memory leaks, jQuery removes other constructs such as data and event handlers
from the child elements before removing the elements themselves."

文本是这样写的:"... jQuery从!C H I L D!元素中删除事件处理程序...“。但我希望事件处理程序也从div标记($("#mydiv").empty)中删除。我知道有" remove“函数,但我的目的是不删除div标签。完成这项工作的最好方法是什么?

另一件事是:

当他们说“删除事件处理程序”时。它们是只删除使用"bind“创建的构造,还是也删除使用"delegate”创建的构造?

提前道谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-23 16:47:03

要从元素中删除所有绑定的事件处理程序,可以向off()方法传递特殊值"*":

代码语言:javascript
复制
$("#mydiv").empty().off("*");

当文档提到remove events handlers时,它只提到绑定的事件处理程序,而不是委托的事件处理程序,因为它们绑定到不受删除影响的祖先元素(或文档本身)。

这允许委托处理程序在以后恢复已删除元素的情况下继续按预期工作。

票数 9
EN

Stack Overflow用户

发布于 2012-07-23 16:50:04

如果我没看错的话,您不希望删除div标记,您只希望删除所有数据和处理程序,在这种情况下,将.empty()与:

代码语言:javascript
复制
http://api.jquery.com/unbind/

但是请注意:“使用.bind()附加的事件处理程序可以使用.unbind()删除。(在jQuery 1.7中,.on()和.off()方法是附加和删除元素上的事件处理程序的首选方法。)在最简单的情况下,没有参数,.unbind()删除附加到元素的所有处理程序:”

使用与您绑定事件的方式相对应的删除工具。

如果您也希望删除正在调用的元素,请不要使用.empty(),而应使用.remove()。

代码语言:javascript
复制
http://api.jquery.com/remove/

类似于.empty(),.remove()方法将元素从DOM中取出。当您要删除元素本身以及其中的所有内容时,使用.remove()。除了元素本身之外,还会删除所有绑定的事件和与元素关联的jQuery数据。要删除元素而不删除数据和事件,请改用.detach()。

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 15:32:58

试试这段jQuery代码;

代码语言:javascript
复制
 jQuery('#element').bind('click',function(){
    console.log('clicked');
    }).on('remove',function(){
       console.log('element removed');
       jQuery(this).unbind('click').off('remove');
    });

    jQuery('#element').remove();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11609053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档