2012-01-18 184 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