需要帮助在javascript中切换表吗

需要帮助在javascript中切换表吗,javascript,css,Javascript,Css,我试图用javascript在两个表之间切换两个按钮,但每当我进行测试时,两个表都会出现,而不是只有一个 var table1=document.getElementById(“table1”); var table2=document.getElementById(“table2”); var btnTab1=document.getElementById(“showTable1”); var btnTab2=document.getElementById(“showTable2”); bt

我试图用javascript在两个表之间切换两个按钮,但每当我进行测试时,两个表都会出现,而不是只有一个

var table1=document.getElementById(“table1”);
var table2=document.getElementById(“table2”);
var btnTab1=document.getElementById(“showTable1”);
var btnTab2=document.getElementById(“showTable2”);
btnTab1.onclick=函数(){
表1.style.display=“表”;
表2.style.display=“无”;
}
btnTab2.onclick=函数(){
表1.style.display=“无”;
表2.style.display=“表”;
}

您的脚本是正确的,正在运行。问题出在
上。它是空的,没有关上。因此,您无法注意到表显示中的更改。试试下面的例子

var table1=document.getElementById(“table1”);
var table2=document.getElementById(“table2”);
var btnTab1=document.getElementById(“showTable1”);
var btnTab2=document.getElementById(“showTable2”);
btnTab1.onclick=函数(){
表1.style.display=“块”;
表2.style.display=“无”;
}
btnTab2.onclick=函数(){
表1.style.display=“无”;
表2.style.display=“块”;
}

表01
表02

您的代码是正确的,但您只是忘记初始化表上的显示并关闭表标记: (我添加了一些内容,以便查看哪个表是可见的)

var table1=document.getElementById(“table1”);
var table2=document.getElementById(“table2”);
var btnTab1=document.getElementById(“showTable1”);
var btnTab2=document.getElementById(“showTable2”);
btnTab1.onclick=函数(){
表1.style.display=“表”;
表2.style.display=“无”;
}
btnTab2.onclick=函数(){
表1.style.display=“无”;
表2.style.display=“表”;
}

表格标题为1
表格标题2

如果您的代码块位于标题中,请尝试将其向下移动到关闭正文标记之前。我只是用两种方式运行它,它在标题中不起作用,在正文中起作用

原因:脚本加载在html之前的头中,因此getelementbyid调用返回null。通过将脚本放在html之后,div填充id,脚本将正确加载它

如果在Chrome中加载文件并打开Javascript控制台,您会看到类似以下的错误消息:

(index):12 Uncaught TypeError: Cannot set property 'onclick' of null
at (index):12

我将用div替换您的表,因为这样可以更轻松地显示代码背后的思想,同时减少混乱

您可以将侦听器直接添加到按钮上,通过这样做,可以更容易地发送参数。我做了一些更具动态性的东西,可以轻松添加任意数量的表,而无需更改代码。您只需将按钮中的
showTable('table2')
中的参数更改为
showTable('table3')

这种解决方案不需要那么多变量,也不依赖于页面是否加载。正如@brianfit所说,您的javascript代码可能位于
head
元素中,这意味着代码运行时文档不存在,因此您无法在页面上找到任何元素

我还认为最好使用类来设置元素的样式,而不是更改代码中的样式。语义看起来更好,您可以更好地理解为什么有些表是隐藏的

函数显示表(tableIdToShow){
隐藏物();
让tableElement=document.getElementById(tableIdToShow);
tableElement.classList.add('show');
}
函数hidealTables(){
让allTableElements=document.querySelectorAll('.table');
for(所有TableElements中的tableElement){
tableElement.classList.remove('show')
}
}
.table{
显示:无;
}
.表{
显示:块;
}
表1
表2
var table1=document.getElementById(“table1”);
var table2=document.getElementById(“table2”);
var btnTab1=document.getElementById(“showTable1”);
var btnTab2=document.getElementById(“showTable2”);
btnTab1.onclick=函数(){
表1.style.display=“表”;
表2.style.display=“无”;
}
btnTab2.onclick=函数(){
表1.style.display=“无”;
表2.style.display=“表”;
}
#表2{
显示:无;
}

表1
表2

你的代码按预期工作,不知道为什么会出现问题。无论你做了什么,都是完美的,只需要隐藏这两个表中的任何一个,以便检查你的功能。请参阅我下面的帖子。我不知道,我与此无关,另一个答案也是如此…@dylnhrhr,如果你觉得任何答案有用,我请你投票或标记为接受,这样投稿人就可以赢得声誉。是的,可能是原因。它类似于你的代码,只是定义了表结构,最初使用CSS隐藏表2,除了它的“你是代码”之外。