2017-08-31 42 views
2

我有一個帶有4個按鈕的頁面(... contacts.asp)。鏈接到另一頁並自動切換隱藏的div

單擊按鈕時,將打開關聯的div部分,並摺疊其他3個部分。這個邏輯工作正常。

現在我想從另一個鏈接到此頁面,但在url鏈接http .... contacts.asp#Sales中按照#tag哈希的指示打開了關聯的div部分。

我的代碼如下,我添加了if聲明希望能夠工作,但事實並非如此。

function showhide(id) { 
    document.getElementById('Corporate').style.display = "none"; 
    document.getElementById('Outlets').style.display = "none"; 
    document.getElementById('Sales').style.display = "none"; 
    document.getElementById('Service').style.display = "none"; 

    var e = document.getElementById(id); 
    e.style.display = (e.style.display == 'block') ? 'none' : 'block'; 
} 

if (location.hash != 0 && location.hash == '#Sales'){ 
    document.getElementById('Sales').style.display = "block"; 
} 
+0

您可以使用'localStorage'的值發送到另一個頁面。當加載另一個時,您可以檢索該值並執行您的操作。看到這個:https://www.w3schools.com/html/html5_webstorage.asp – PedroSouki

+0

你的情況應該工作。我認爲這不是個案問題?您是否確認了包含'#Sales'的URL包含大寫字母S? –

+0

你能提供一個小提琴嗎? –

回答

2

相關的代碼很可能被執行得太早了。

當這個代碼更確切地說:

if (location.hash != 0 && location.hash == '#Sales') { 
document.getElementById('Sales').style.display = "block"; 
} 

被執行時,「#Sales」 DOM-元也許並不存在,因爲DOM尚未完全加載。因此執行此操作不會發生任何事情。

這意味着代碼必須在加載DOM後執行。要做到這一點,例如'DOMContentLoaded'事件。 (你也可以使用「的onload」事件。)

因此,作爲解決方案,您應該編寫事件處理程序中的代碼:

document.addEventListener("DOMContentLoaded", function() { 
    // the if statement 
}); 
+0

是的!這工作。謝謝! – TStorm