每个人,我都有一个相当奇怪的问题。
在一个HMTL非强制列表中,我有几个带有onClick事件的列表元素,它们都调用相同的函数。
<ul>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">1</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">2</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">3</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">4</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">5</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">6</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">7</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">8</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">9</li>
<li onClick="Javascript:show(this.innerHTML); alert(this.innerHTML);">0</li>
</ul>
这是Javascript函数:
function show(ID){
show = document.getElementById(ID);
notShow = document.getElementsByClassName("visible")[0];
if (typeof notShow !== "undefined"){
notShow.classList.toggle("hidden");
notShow.classList.toggle("visible");
}
show.classList.toggle("hidden");
show.classList.toggle("visible");
}
由于某些未知原因,当我首先单击其中一个<li>
元素时,该函数正常工作,但第二次我这样做时出现错误:
Uncaught TypeError:object不是函数ACNL.php:31
我认为错误不在javaScript函数中,而是在调用函数的HTML元素中。
任何帮助将不胜感激!
答案 0 :(得分:0)
我在这看到一些问题。没有特别的顺序:
show
更改为其他内容可能是最安全的,因为您的函数也称为show(...)
。var
关键字声明变量,以避免填充顶部命名空间。li
个项目中,例如id="1"
visible
开头,那么当您“切换”时,您会同时添加visible
和hidden
。visible
项上切换hidden
和li
,那么notShow = document.getElementsByClassName("visible")[0];
可能会发生变化,因为一旦他们将检索li
项目其中有visible
个。尝试使用其他类名或元素类型。这是一个jsFiddle来帮助你入门(忽略特定于jsFiddle的window.show定义)。