2014-02-08 40 views
0

我正在使用名为jQuery推送器(https://github.com/salvan13/jquery-pusher)的插件在站点的某些部分创建一些ajax导航,但是此插件只能初始化一次,我需要能够应用它到通过ajax加载的新内容。创建函数的额外实例

我的问题:可以通过命名空间或其他方式来解决这个问题,以创建同一个函数的多个实例,而不会覆盖/干扰eachother?

回答

1

你真正的问题的措辞是什么意思,我认为这是你的困惑的根源不是很清楚。

确实,插件初始化不能像jQuery那样可以延迟处理程序的方式来“延迟”,它将处理程序应用到顶层元素并从那里过滤事件。插件需要直接的元素初始化:

$('#someElement').pusher(); 

或一组匹配的元素:

$('.someElements').pusher(); 

所以,添加到DOM后面的元素,比如通过AJAX,你需要加入后,他们明确地对它们进行初始化:

$('#someContainingElement').load('ajaxcontent.html' function() { 
    $('#someContainingElement .someElements').pusher(); 
}); 
+0

谢谢你的回答! 对不起,如果我说我的问题有点不清楚。我已经完成了你所说的话,然而在这种情况下的问题是,一旦推进器在#someOtherElement上运行,就会停止对#someElement进行处理(它在第二次运行时会覆盖自身)。 这就是为什么我想知道它是否可以通过名称空间解决或类似。 – jwaern

+0

@jwaern:这是奇怪的行为,我想知道插件作者是否打算出于某种原因。如果你在两个元素上连续两次初始化插件(完全从图片中取出AJAX),你还会看到这种行为吗?也许插件要求所有匹配的元素在一次初始化调用中传递?在这种情况下,在AJAX回调中,您只需展开选择器即可包含所有需要初始化的元素。 – David