我创建了一个网站,它使用Fancybox来播放ajax弹出窗口(主要是表单)。这些弹出窗口的内容是从PHP文件加载的。一切都运作良好。
我的实际问题是:Fancybox弹出页面是否应包含
A)完整的HTML(包含doctype,head,css-includes等)或
B)只是表单的HTML,类似于Fancybox的内联版本。 Fancybox文档在他们的示例中使用了这个。
我已经对两者进行了测试,但两者都有效,但存在细微差别:
datepicker仅在弹出窗口
css文件可在
很难在B版本中测试HTML有效性
版本A即使Fancybox因任何原因发生故障也能正常工作
这就是为什么我倾向于选择a,但我在这里错过了什么?我不考虑的问题是什么?我不想使用内联版本,因为页面上有很多表单,而且一次只使用很少的表单。
答案 0 :(得分:0)
您应该考虑一些微妙的差异:
1)。当您通过 ajax 加载内容时,内容将成为当前文档的一部分,并且ajaxed元素将受到加载内容的(父)页面的CSS和JS设置的影响。
换句话说,您希望从ajaxed内容(理想情况下)中获得的任何(CSS和JS)功能需要先在父页面中初始化(使用委托的表单)或在其中初始化它们fancybox回调(fancybox v2.x的afterShow
)
在这种情况下,返回的内容(来自php文件)不需要完整的结构(DOCTYPE
,<head>
,<link>
或<script>
标签)但内容正文的HTML元素。
底线:父页面和ajax内容成为一个单独的文档(虽然关闭fancybox后将从DOM中删除ajaxed元素)
注意:ajaxed页面中的元素可能会影响或与父页面中的元素冲突。
2)。另一方面,您可以拥有一个独立且功能齐全的页面(DOCTYPE
,<head>
,<link>
或<script>
标签等),并拥有自己的CSS和JS功能。
此页面可以通过 iframe 模式加载到fancybox中,并且其DOM元素不会受到父页面的CSS和JS设置的影响(父页面中的元素赢了&# 39;不受iframed页面中元素的影响<)>
底线:无论视图如何,父网页和iframe内容都是两个独立的文档。
你需要使用什么?
如果您不想在父页面中加载和初始化许多脚本,则可能需要使用iframe
,但这是一个有很多答案的问题,由您决定是什么&#39最好的。