我有一个问题我正在使用jquery U.I标签,用ajax加载所有内容。现在,我每次点击选项卡时都会将部分视图加载到该选项卡中。
现在在这个局部视图中,它们是javascript文件,它们使用jquery来绑定该选项卡中所需的所有事件以及我正在使用的一些jquery插件。
现在,每次加载该选项卡时,所有这些脚本都会被加载。如果它被点击了10次,那么这些脚本被加载了10次,现在每个说我的按钮现在将有10个相同的事件就意味着如果有人点击那个按钮,10个事件将全部触发并执行相同的操作。
所以我需要找到一些解决方案来移动所有脚本并将其放在主页面上并使用jquery.live或其他解决方案。
我试图对UI选项卡使用jquery缓存,但这不起作用,因为有些事情说Tab A当更改效果选项卡B意味着我需要重新加载选项卡B但是脚本无法重新加载否则我运行和现在一样的问题。
答案 0 :(得分:6)
Read here有关jQuery事件委派的精彩演示文稿。
看完上面的内容后看看:
// using jQuery 1.4.2
(function($){
// You can cache the container you plan on using for event delegation.
// If using $(document).ready(...) to call the below functions
// your "container" element should already exist in the DOM
// (the .specialAjaxLink elements don't have to exist yet).
var container = $("#container");
// whenever an element with the class "specialAjaxLink" is clicked
// while inside your container element execute the handler on them.
container.delegate(".specialAjaxLink", "click", function(){
// do something amazing...
solveWorldHunger(this);
// stop propagation and prevent default...
return false;
});
}(jQuery));
使用上述方法时,您不必担心性能问题,除非您创建的应用程序与gmail,docs或google wave一样复杂。
答案 1 :(得分:2)
我通常在bind()
之前调用unbind()答案 2 :(得分:0)
请考虑使用事件委派,而不是使用.live()。侦听容器内的事件,然后检查标记和属性以决定如何处理它。
如果你要向DOM中添加一堆元素,效率会更高。