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

时间:2014-08-19 14:56:13

标签: javascript jquery

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

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

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

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

3 个答案:

答案 0 :(得分:0)

你应该可以在同一个动作上写一个新的事件处理程序,它应该替换旧的事件处理程序并将动作留给你的新动作。

在控制台或命令行中试用。

答案 1 :(得分:0)

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

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

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

请注意$._data是私有财产,并且无法保证它不会在某一天发生变化(就像之前您可以使用$.cache访问元素数据一样,但现在已经不见了。)

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

答案 2 :(得分:-1)

最简单的方法是,在服务器端定义句柄,就像,

var yourhandler = function() {
    //do stuff
});

然后,在加载新元素后,您可以将“yourhandler”置于其中,例如

$( document ).ready(function() {
  $('#wrapper .block h2').click(yourhandler);
});