2010-08-26 69 views
0

我有一些jQuery脚本选择我运行部分页面刷新的区域内的元素。jQuery脚本不再在部分刷新的元素上运行

我使用这个CSS技巧的代码片段刷新页面的那一部分:

$('#refreshbutton').click(function() { 

var url = "http://myUrl.com/indexTest.php?ID=" + Math.random(); 

setTimeout(function() { 
     $("#maindisplay").load(url+" #maindisplay>*",""); 
}, 100); 
}); 

的问题是,#maindisplay中的元素发生变化,因此被认为是在DOM中的新元素。由于选择这些元素并将函数附加到它们的脚本在domready上运行,而不是在局部刷新期间运行,因此会产生问题。

到目前为止,在部分刷新它之后,我一直无法找到将脚本重新附加到#maindisplay中的元素的方法。

我的问题是:什么是将脚本重新附加到页面刷新区域的最佳方式。

谢谢你的任何建议。

回答

0

你,我能想到的下列选项:

  • 把附着在一个函数并调用网页上的功能更新
  • 使用.live()功能
  • 使用.delegate ()功能
  • 将Javascript引用添加到刷新中的引用中的功能,以便它作为该刷新的一部分执行
  • 将该函数放入回调中
  • 使你的setTimeout的一部分
  • 其他一些创造性的方法,我没有想到的...

刚一说明:我会看.delegate()与上下文选择在最近的版本中添加(例如在1.4.2中可用)。

+0

感谢您的回答,作为快速跟进问题。其中一个附加到元素的脚本是.tooltip函数,该函数在mouseenter上触发。现在,如果我把它这样的: $( “机构”)的委托( “工具”, “了mouseenter”,函数(){$ (本).tooltip({// 事情 \t} ); }); 然后,用户必须先将鼠标悬停在元素上,然后再次将鼠标悬停在工具提示上。如何使用.delegate或.live,而不必让他们进行两次鼠标移动? – BorisKourt 2010-08-26 21:31:46

+0

我认为这与绑定级别有关。查看.delegate中的链接,并考虑鼠标事件,该事件要尽可能保持为本地,以便它在右元素上触发,而不是在父元素上触发。请牢记.delegate,你可以链接,而.live不能。你可以在这里看到一个博客:http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery – 2010-08-27 15:54:16

+0

谢谢Mark,这非常有帮助。 – BorisKourt 2010-08-28 03:14:47

0

load()没有采用回调函数,因为它是第二个参数?为什么不将事件处理程序重新附加到具有该功能的元素上?

$('#result').load('ajax/test.html', function() { 
    //reattach event handlers here. 
}); 
1

您需要使用live()函数来附加您的点击处理程序。