我正在使用大型图表和其他小部件模板。我还手动实现了一些ajax选项卡。现在,只要这些标签加载新内容(图表),问题就是head标签中的所有模板脚本都不再使用那些加载了ajax的元素。
我知道,通常你会使用.live来解决这类问题,但这意味着要进入整个50k line-js模板并将所有内容更改为.live调用...不能真正做到这一点。< / p>
是否存在重新加载/重新激活head-tag中所有脚本的jquery方法?
答案 0 :(得分:4)
首先关闭.live()
早已被弃用,甚至从最新版本的jQuery中删除。你永远不应该考虑使用.live()
。
其次,听起来你已经知道,&#34;对&#34;解决此问题的方法是更改您的代码以使用.on()
的委托形式,这取代了.live()
。是的,更改所有以错误方式执行此操作的代码。这里a post使用.on()
的委托形式而不是.live()
。
第三,解决方法是将所有将这些事件处理程序挂钩的初始化代码放入单个函数中(或由单个函数调用)。然后,您在初始化时调用该单个函数,然后您可以在重新加载内容后随时调用该单个函数。诀窍是你只能将代码放入可以调用的初始化函数中,或者在重新加载内容后应该多次调用。如果你在那里放置一些不应该存在的事件处理程序,那么你可能会安装重复的事件处理程序。因此,只应用于替换内容的事件处理程序初始化应该在此函数中。
假设该函数被称为initDynamicContent
,那么它可能如下所示:
// init event handlers on the original version of the dynamic content
$(document).ready(initDynamicContent);
然后,在您更换动态内容后的某个时间,您可以这样做:
// code here that replaces the dynamic content with new content
initDynamicContent();
没有神奇的jQuery方法可以自动发生。 jQuery绝对无法知道应该再次运行哪些代码以及哪些代码不应该运行。