问题w / window.location.hash

时间:2011-10-11 18:47:23

标签: javascript css html

我的网站上有这个内容框,侧边有不同的标签,当你点击其中一个标签时,它会使用JS隐藏/显示内容框中的相应div。

我也有这个想法,在内容框中为每个div提供它自己的URL:

<script type="text/javascript">
  function loadSmugInfo() {
    if(window.location.hash == '#smuginfo')
      document.getElementById('contentInfo').style.display = "block";
      document.getElementById('contentSlideshow').style.display = "none"
  }
</script>

<script type="text/javascript">
  function loadFind() {
    if(window.location.hash == '#find')
      document.getElementById('contentMap').style.display = "block";
      document.getElementById('contentSlideshow').style.display = "none"
  }
</script>

<script type="text/javascript">
  function loadSmugmug() {
    if(window.location.hash == '#smugmug')
      document.getElementById('contentSmugInfo').style.display = "block";
      document.getElementById('contentSlideshow').style.display = "none"
  }
</script>

<script type="text/javascript">
  function loadMain() {
    if(window.location.hash == '#')
      document.getElementById('contentSlideshow').style.display = "block"
  }
</script>

<script type="text/javascript">
  function loadSlideshow() {
    if(window.location.hash == '#slideshow')
      document.getElementById('contentSlideshow').style.display = "block"
  }
</script>

我也有,所以当你点击一个标签时,它会改变哈希值。

这是我的问题。 当页面正常加载(没有哈希)时,第一个和最顶层的div仍然没有显示(即使它设置为显示:CSS中的块)。

我正在加载上面看到的功能,在内容框上方的图像上使用onLoad。

任何帮助都会受到赞赏,我的日程安排有点紧张。 如果您需要更多信息,请与我们联系。 谢谢!

3 个答案:

答案 0 :(得分:2)

如果你正在做我理解你正在做的事情,你必须使用

if( (window.location.hash == '#') || (window.location.hash == '')

而不是

if(window.location.hash == '#')

因为加载脚本时哈希是空的。

旁注:

您只需要一个功能:

function whatever()
{
    if(window.location.hash == '#smuginfo')
    {
        case1
    }
    else if(window.location.hash == '#find')
    {
        case2
    }
    .
    .
    .
    else
    {
        default for no hash
    }
}

使用switch声明会更短......

答案 1 :(得分:1)

这里有几个问题。

首先,你没有显示任何调用这些功能的方法。您可能希望启动间隔计时器来轮询这些函数并定期检查它们。这将确保他们评估页面加载和每次哈希更改。

您还在评估hash ==“#”这是默认值,但不会在初始页面加载时显示。也许放一个AND condiation检查它是否==“”。

以下是我用于哈希轮询的一些代码的示例。也许它可以提供帮助。

var start_hash = window.location.hash;
var recent_hash = ''; 

process_hash(start_hash);        // Start the initial hash check
setInterval(poll_hash, 100);    // Initialize our hash polling interval

function poll_hash() {
 if (window.location.hash==recent_hash) { return; } // No change in URL hash
 recent_hash = window.location.hash;                // Set to check next time. 
 process_hash(recent_hash);                         // Changed hash, lets process
}

function process_hash(current_hash) {
 // Check for defaults, then set to #home.
 if(!current_hash || current_hash == '' || current_hash == '#') 
  { current_hash='#home'; }

 // Strip the # for the hash
 var hash_id = current_hash.match(/[^#]+/g);                

 if(hash_id == 'home') { do something; }
}

答案 2 :(得分:-2)

试试这个:

<script> 

    document.domain = 'facebook.com'; 
    try { 
      try {
         if (window.opener && window.opener.graphexplorer) {    
            window.opener.graphexplorer.authCallback(window.location.hash); 
         }
      } catch(e) { } 
    } catch (e) { }
    window.location.hash = ''; 
    window.close(); 

</script>