2

我正在使用 jQuery 工具在我的网站上设置一些覆盖表单和对话框。到目前为止,它们一直运行良好,但是对我的网站的更改引发了一些问题:

在包含覆盖的页面上,我正在做一些 ajaxy 的东西来向页面添加新项目。其中一个项目包含一个链接,该链接本身旨在触发覆盖并呈现一个表单,就像页面上的其他项目一样。将项目添加到页面工作正常,但该项目中的链接不会打开覆盖中的表单。相反,它会在单独的页面中打开。当我刷新页面时,新项目就在那里,它的链接现在可以在叠加层中正确打开。

我怀疑仅将项目添加到页面是不够的——我必须戳 jQuery 或 jQuery 工具或其他东西,以便设置一些内部东西,将新项目的链接连接到覆盖层。我认为当页面重新加载时会发生这种情况,因为“新”项目到那时只是页面上的另一部分内容,但它不会发生在 ajax 调用中,因为所做的只是将一些东西插入页面的 DOM。

我在这里吗,并且(如果我在这里),有没有人知道在 jQuery 或工具中必须戳或踢什么才能建立这些连接?我一直在寻找名为“激活”或“初始化”之类的 API 调用,但运气不佳……谢谢!

4

1 回答 1

1

我假设您添加了 ajax 的 html 链接看起来像这样:

<a href="external-content.htm" rel="#overlay">Do It</a>

你的页面中某处有一些 javascript,看起来像这样:

$('a[rel]').overlay({ 
   /* your options here */
});

此处显示的 javascript 只是查找叠加插件并将其应用于a定义rel属性的所有元素。在典型的页面中(使用类似 jquery 的东西document.ready()),javascript在 html 加载运行,所以一切正常。

这里的问题是,您的 ajax 操作在 javascript 已经运行之后将新链接添加到页面,因此覆盖插件永远不会附加到您添加的 ajax 链接;如果没有叠加增强,链接的功能就像普通的 html 链接一样——在新窗口中打开外部页面。

解决方案是在您的 ajax 函数完成后再次运行 javascript。假设您正在使用jQuery.ajax来运行您的 ajax 请求,您只需要success在对象中提供一个处理程序settings,并在其中重新运行覆盖 JavaScript 插件,如上所示。


编辑:我应该注意这不是最有效的解决方案,因为它将覆盖插件应用于页面中的所有链接——即使是那些已经拥有它的链接。当然,您可以使用更具体的选择器来仅定位您刚刚添加的链接 - 但对于大多数应用程序,将其再次应用于所有内容不会有问题。

于 2011-02-20T21:23:16.543 回答