javascript - jQuery 将元素添加到先前定义的事件处理程序

标签 javascript jquery

使用 jQuery,是否可以将元素添加到先前定义的事件处理程序中?我意识到这样做的正确方法是使用 on() 定义处理程序,以便包含动态插入的元素,但问题是我试图扩展的处理程序是由代码定义的在我无权访问的服务器上。服务器在文件顶部输出如下代码:

$('#wrapper .block h2').click(function() {
    //do stuff
});

然后,在页面底部,我添加了一些自定义 javascript 代码,用于插入另一个 #wrapper .block h2 元素。我想知道是否有任何方法可以将这个新元素包含在由注册 click 处理程序的页面顶部的代码定义的事件处理程序中。

或者,有没有什么方法可以让我以编程方式访问为该事件处理程序定义的回调函数?这样我就可以使用 on() 方法自己重新创建它。

最佳答案

为此,您需要访问由 jQuery 存储的内部事件句柄。在以前的版本 ( prior to 1.8 ) 中,您可以使用数据 API 来完成它,例如 $('.some').data('events')。但是,它不再可用。但是您仍然可以使用 $._data 方法访问元素数据对象。然后你会做这样的事情:

var events = $._data($(selector)[0], 'events'),
    click = events && events.click;

if (click) $el.on('click', click[0].handler);

但是请注意,$._data 是一个私有(private)属性,并且不能保证它有一天不会改变(就像以前你可以访问元素数据一样$.cache,但它现在不见了)。

演示:http://jsfiddle.net/dfsq/e94hau62/

关于javascript - jQuery 将元素添加到先前定义的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386649/

相关文章:

javascript - 有没有更清晰的方法来处理链式 Promise?

javascript - 实现更改 fadeIn fadeOut 内容菜单 Jquery 的最佳方式

javascript - 套接字 IO V0.7 : How to send message to more that one specific client

jquery - DataTable分页自定义选择所有行

java - 如何在 Bootstrap 4 中使用服务器端数据创建动态响应式卡片 View ?

javascript - 简化 Node V8 childprocess.exec

javascript - 丢失全局变量值

javascript - 获取一行中复选框的标题名称

jquery - jquery 中是否有原型(prototype)序列化()的等效项

javascript - 处理从 ajax post 下载的文件