2012-09-14 24 views
1

我使用.load()填充新的内容的div,但是当我做我必须回忆我的所有脚本,以便在新内容中使用它们,我相信这是什么导致我的事件处理程序两次触发。使用.load()更改divs内容时是否需要重新包含脚本?

我错了吗?如果没有,还有其他方法吗?

$('.user').click(function(){ 
    if ($section !== 'users'){ 
     $section = 'users'; 
     $('div#contentWrapper').fadeOut(0).empty(); 
     $('div#contentWrapper').load('pages/users.html').fadeIn(500); 
    } 
    else{ 
     return; 
    } 

这是代码,这显然是发射两次。

$('.addUser').click(function(){   
    $('.userPanel').fadeOut(0).empty(); 
    $('.userPanel').load('pages/addUser.html').fadeIn(500); 
    }); 

我初步认为这是淡出造成它,所以我把它设置为即时但没有解决问题。网站上的另一篇文章曾经建议首先解除绑定点击处理程序,但据我所知,这是一个无法解决的问题,而id正好解决了这个问题。

我是jquery的新手,非常感谢你们提供的帮助。

回答

0

当您动态加载元素时,需要使用jQuery的.on()函数将事件绑定到加载的元素。您需要将.on()绑定到DOM中已经存在的元素,通常情况下最糟糕的情况就是body元素。如果你比body更具体,你通常会得到改善的性能。

例如,如果您加载表行到一个表,并希望在新行的单击事件绑定,你会使用:

$("table").on("click", "tr", function(event){ 
    //do something 
}); 
+0

所以为了使用任何的jQuery的div中我加载到一个标准的HTML页面,头部已包含脚本调用我的脚本,我必须绑定每个元素,我想要做的事情?这似乎有点hinkey ... – SelfTaughtCodeMonkey

+0

为了将任何事件绑定到动态加载的元素,您需要将它们与.on()绑定。 – j08691

+0

好的感谢您的快速回复猜我会做一些重组。 – SelfTaughtCodeMonkey

相关问题