Javascript-Display div

Javascript-Display div,javascript,html,show-hide,Javascript,Html,Show Hide,如果需要,我需要检查onload是否在URL中有锚,以打开选项卡。问题是,如果用户在启动onload函数之前打开一个选项卡,该选项卡将关闭,用户需要再次打开它。 如何解决这个问题 HTML: JS功能: var divState = {}; function showhide(id) { if (document.getElementById) { var divid = document.getElementById(id); divState[id

如果需要,我需要检查onload是否在URL中有锚,以打开选项卡。问题是,如果用户在启动onload函数之前打开一个选项卡,该选项卡将关闭,用户需要再次打开它。 如何解决这个问题

HTML:

JS功能:

var divState = {}; 
function showhide(id) {
    if (document.getElementById) {
        var divid = document.getElementById(id);

        divState[id] = (divState[id]) ? false : true; 
        for (var div in divState){
            if (divState[div] && div != id){ 
                document.getElementById(div).style.display = 'none'; 
                divState[div] = false; 
            }
        }
        divid.style.display = (divid.style.display == 'block' ? 'none' : 'block');
    }
}
谢谢。
Uli

我非常确定,在onload之前会立即执行函数中的标记,因此请尝试。

您可以使用额外的参数调用函数,以确保它将显示在加载函数中

然后检查全局初始化变量,以检查用户在从checkurl函数运行时是否已执行该函数。如果用户单击的选项卡与URL中指定的选项卡不同,则需要执行此操作

此外,在更新底部的divid.style.display时,还需要检查divState[id],而不是divid.style.display=='block'

function checkurl(){      
  if (window.location.hash == '#about')      
  {      
    showhide('secabout', true);      
  }      
  else if (window.location.hash == '#contact')      
  {      
    showhide('seccontact', true);      
  }      
}      

var divState = {};   
var initialized = false;
function showhide(id, initialize) {  
  if(initialized && initialize) return;
  initialized = true;
  if (document.getElementById) {  
    var divid = document.getElementById(id);  
    divState[id] = (divState[id]) ? false : true; 
    for (var div in divState){  
      if (divState[div] && div != id){   
        document.getElementById(div).style.display = 'none';   
        divState[div] = false;   
      }  
    }  
    if(initialize){ 
      divid.style.display = 'block';  
    } else { 
      divid.style.display = (divState[id] ? 'block' : 'none');  
    } 
  }  
}  

禁用选项卡,直到触发onload…它不工作。如果URL包含例如contact,并且在onload函数启动之前单击了tab about,那么secabout div将不再关闭。它保持打开状态。在最后一行更新divid.style.display时,需要检查divState[id],而不是divid.style.display=='block'。我已经更新了我的代码示例来解决这个问题。我还添加了一个全局初始化变量来控制用户在onload运行时是否已经选择了选项卡。谢谢您的回答。它在域的根上工作得很好,但是如果我在子页面上使用它,比如-我错过了什么吗?在哈希之前尝试使用斜杠:example.com/about/teamIt需要使用斜杠和不使用斜杠。有没有办法解决这个问题?谢谢。是的,它确实存在,但这没有帮助,因为在那个时候,元素还不存在,所以它将什么也不做。
var divState = {}; 
function showhide(id) {
    if (document.getElementById) {
        var divid = document.getElementById(id);

        divState[id] = (divState[id]) ? false : true; 
        for (var div in divState){
            if (divState[div] && div != id){ 
                document.getElementById(div).style.display = 'none'; 
                divState[div] = false; 
            }
        }
        divid.style.display = (divid.style.display == 'block' ? 'none' : 'block');
    }
}
function checkurl(){      
  if (window.location.hash == '#about')      
  {      
    showhide('secabout', true);      
  }      
  else if (window.location.hash == '#contact')      
  {      
    showhide('seccontact', true);      
  }      
}      

var divState = {};   
var initialized = false;
function showhide(id, initialize) {  
  if(initialized && initialize) return;
  initialized = true;
  if (document.getElementById) {  
    var divid = document.getElementById(id);  
    divState[id] = (divState[id]) ? false : true; 
    for (var div in divState){  
      if (divState[div] && div != id){   
        document.getElementById(div).style.display = 'none';   
        divState[div] = false;   
      }  
    }  
    if(initialize){ 
      divid.style.display = 'block';  
    } else { 
      divid.style.display = (divState[id] ? 'block' : 'none');  
    } 
  }  
}