2012-01-18 180 views
1

我正在使用Fancybox和Zend。希望以下明确。从iframe中重新加载页面

在www.example.com/template/edit/id/3我有jQuery UI选项卡。他们可以通过锚点直接到达。例如。 www.example.com/template/edit/id/3#taps-2

关于#tabs-2我有一些元素,无关紧要。您可以创建或编辑它们。这个元素有一个自己的控制器,所以为了编辑它们,你可以调用/ elements/edit/id/44。目前,我正在使用Fancybox进行图层操作。我正在使用Fancybox的Iframe功能。因此,如果您在/ template/edit上,并且您单击某个元素的编辑按钮,则会打开一个包含加载/元素/编辑的iframe的图层。

因此,如果您现在更改元素并单击保存,我希望图层自动关闭并重新加载。

Fancybox提供了一个选项来指定它在关闭时应该做些什么。目前,我得到它是这样的:

'onClosed'   : function() {window.location.reload();} 

这实际上重新加载顶部窗口,而不是iframe。此外,有可能通过JS关闭Fancybox。我这样做,通过设置触发这个视图变量,如:

<?php if($this->close): ?> 
    <script type="text/javascript"> 
    parent.$.fancybox.close(); 
    </script> 
<?php endif ?> 

所以,如果储蓄是成功我设置$这个 - >查看 - >关闭= TRUE,并得到clsoed层触发我的JS。

这工作正常。我现在的问题是在我的网址中使用#tabs-2进行重新加载。

当然,我可以得到的URL,从其他锚点清理它我的用户输入等,并建立我的网址,我设置窗口的位置,但不知何故,我认为,必须有一个更简单的解决方案。

E.g.将浏览器的网址设置为#tabs-2而无需重新加载,但这听起来不是很好。重装很容易,但有一个非常棘手的锚点。

+0

你尝试'window.location.href = window.location.href'? – Mottie 2012-01-18 14:25:19

+0

这与reload()相同。重新加载的工作实际上是,但如果你在第二个选项卡上,编辑一些东西,保存它,你想在重新加载后保留在第二个选项卡上,而不是回到第一个选项卡上。第一个选项卡默认没有锚点。 – xotix 2012-01-18 14:48:12

回答

1
window.location.href = "#tabs-2" 

可能:

<script type="text/javascript"> 
    parent.$.fancybox.close(); 
    window.location.href = "#tabs-2" //Add the anchor, won't stack. Will replace existing anchor 
    window.location.reload() //Refresh the screen, maintain anchor 
</script> 
+0

如果他在一行中编辑了几个元素,则以../id/2#tabs-2#tabs-2#tabs-2结尾。我可能必须检查windows.location.href是否包含#tabs-2或1,并根据该内容处理它 – xotix 2012-01-18 14:46:17

+0

确保按原样放置它......不需要额外的特殊逻辑。无论如何,它确实不应该像那样堆积起来 – 2012-01-18 14:58:06

+0

。它将我链接到element/edit/id/2#tabs-2而不是模板。我真的不明白为什么。在onClosed中提醒href给了我正确的路径,但是如果你让href = tabs2,那么它就会进入元素。另外window.top不会改变任何东西。 – xotix 2012-01-18 15:27:37