2017-08-31 99 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