jQuery选项卡和Ajax - 如何设置页面?

时间:2009-08-04 16:06:46

标签: jquery jquery-ui jquery-ui-tabs

我已经开始使用jQuery的UI选项卡,它们在大多数情况下都很好用,但我遇到了一些问题。当我在选项卡之间来回切换时,当我返回到该选项卡时,某些项目的功能会丢失。这让我怀疑我是否正确地构建了它。谷歌搜索没有发现,所以我决定在这里问。

所以问题是:如果我有通过Tabs + AJAX提取的页面,并且这些新页面具有我想要使用jQuery的功能,我在哪里放置jQuery?我现在的结构如下:

带标签的页面:main_page.php 该页面上有两个选项卡:一个通过AJAX拉入“page1.php”,另一个拉入“page2.php”。

page1有自己的元素,然后我使用jQuery。那个jQuery代码在哪里?它是在main_page.php上还是在page1.php上?

现在我一直把它放在第1页上,我认为这是正确的,但这已经产生了其他问题,所以我只想仔细检查一下,看看是否正确。

1 个答案:

答案 0 :(得分:1)

请将所有javascript放在单独的.js文件中。单独的数据(html),演示文稿(css)和行为(javascript,flash ...)。它将简化应用程序的维护和扩展。你和其他人可能有一天必须维持它。

关于您的问题:由于您切换标签,新加载的内容不会附加任何行为。为什么?当你第一次加载你的页面,从而加载你的javascript它只适用于DOM的当前状态(如果你愿意,html结构)。当您单击另一个选项卡时,您通过ajax加载您的内容,因此该页面将不会刷新,这意味着:这个新内容将不会应用该javascript,因为当javascript被激活时它不可用第一名。所以你有两个选择:

  • 将javascript与你加载的html一起注入(在它之后)。这是不好的做法,但它确实有效。
  • 您使用jquery live()函数绑定事件。这是正确的选择。

使用live(),行为将始终附加到DOM元素。

所以而不是

$('#myel').bind('click',dothis());
你做了

$('#myel').live('click',dothis());

这样,无论显示哪个选项卡,其内容都将绑定到该功能,而无需重新附加。