2012-12-08 60 views
2

首先我想說,我已經編寫了JavaScript大約3個月的時間,並且我並不十分關心標準或最佳實踐解決這個問題。我主要關心的是學習如何使用DOM。我不想使用任何jQuery,因爲我不熟悉它。我可以打開一個新窗口並在JavaScript中更改調用窗口的DOM嗎?

我想使用JavaScript和DOM在我的頁面上創建非專業的「登錄」功能。首先,我使用的「登錄」屏幕最初將顯示爲「隱藏」,然後在使用時顯示爲「屏蔽」。當我在「登錄」屏幕後面添加一個變暗的屏幕時,通過在「登錄屏幕」下面的頁面的主要部分添加較少的不透明度(0.1不透明度),這很好,並且看起來非常好。

當我關閉「登錄」屏幕時,這(不透明度)將恢復正常。所以你可以看到使用相同的DOM在同一頁面內發生的所有事情。好的,這就是我想要它的工作原理:你創建一個用戶名,然後你創建一個密碼。轟隆完成!

但是,這裏有問題:在你創建一個用戶名和密碼後,我希望它說「你好(用戶名在這裏)」登錄鏈接最初是。我可以使用DOM並將用戶名插入HTML頁面,但是當我提交登錄函數的表單時,頁面會重新加載,並且DOM的更改將被刪除!

所以,現在我可以告訴你我想到的解決方案:使窗體(登錄頁面)在新窗口中,所以當窗體被提交(並且DOM被操作)時,新窗口被重新加載,然後隨後關閉,保持對主頁面DOM的更改不變。唯一的問題是我無法弄清楚如何做到這一點。你可能會說這是一個主要問題哈哈哈。

那麼,我可以從新窗口操縱父窗口(即調用窗口)DOM嗎?

+0

您使用服務器端技術(ASP,PHP,JSP ...)嗎?或者它只是簡單的html + js?接收你提交的表單有能力生成它的html,包括新的'Hello [username here]'消息。 – Roimer

+0

我使用純html + js。我不會把表格發送到任何地方。像這樣:

我只是查了一下ASP,所以我對它並不是很熟悉,我沒有做任何服務器端的事情,但是我應該使用ASP來生成新的HTML嗎? – Chakotay

+0

如果你不需要發佈表單,那麼不要這樣做:) jeje,只是「檢測」用戶點擊提交按鈕爲了「刪除」登錄div(你的第一種方法),但不要允許它發佈帖子,所以你可以隨心所欲地操縱DOM。 – Roimer

回答

2

迴應您的回答:您可以通過在新窗口中使用window.opener.document修改呼叫者窗口的DOM;

window.opener是對調用者窗口(如果有,否則爲null)的引用,但僅當兩個窗口來自same domain時)。

注意:這是一個小型網頁,或者你要通過javascript在網站/應用程序上做很多DOM操作?在後面的情況下,您應該使用JavaScript庫/框架(我推薦jQuery)以便更輕鬆地完成骯髒的工作。

+0

window.opener.document工作!謝謝。 – Chakotay

+0

回答你的筆記。這只是我爲實踐網頁開發而製作的一個小型網頁。我聽說過很多關於JQuery的內容,當我需要它時,我會對它進行調查。謝謝您的回答! – Chakotay

+0

不客氣!記得標記答案:) – Roimer

0

彈出窗口可以找到使用opener變量打開它的窗口。

如果彈出窗口和原始窗口都來自同一個域,那麼彈出窗口確實可以修改原始窗口的HTML。

如果彈出窗口和原始窗口包含來自不同域的內容,則由於瀏覽器放置的跨源保護,它們無法看到彼此的HTML。

+0

在我的情況下,首戰者工作得很好。但是開放者是一個變量嗎?我認爲這是一種方法? – Chakotay

相關問題