u和v的值正确地为1和0 ......但是语句“t[i].children[v].onclick=function(){}
”中没有使用这些值。!!
当我在u的位置使用1而在v的位置使用0时,这非常有效!
这是代码:
<div class="dropdown">
<span class="menu-toggler">Menu</span>
<ul class="dropdown-menu">
<li>First Part</li>
<li>Second Part</li>
</ul>
</div>
<script type="text/javascript">
function init()
{
t = document.getElementsByClassName("dropdown");
for(i=0;i<t.length;i++)
{
v = getMenuToggler(t[i]); // v is becoming 0 correctly
u = getDropDown(t[i]); // u is becoming 1 correctly
// the next statement is not working properly!!!
t[i].children[v].onclick=function(){if(this.parentNode.children[u].classList.contains("menu-
open")){this.parentNode.children[u].classList.remove("menu-open");}else{this.parentNode.children
[u].classList.add("menu-open");}}
}
}
function getDropDown(x) // this function is all right... u can ignore this
{
for(i=0;i<x.childElementCount;i++)
{
if(x.children[i].classList.contains("dropdown-menu"))
return i;
}
return -1;
}
function getMenuToggler(y) //this function is all right... u can ignore this
{
for(i=0;i<y.childElementCount;i++)
{
if(y.children[i].classList.contains("menu-toggler"))
return i;
}
return -1;
}
</script>
<script>window.onload=init;</script>
提前谢谢你...... :)
答案 0 :(得分:2)
window.onload=init();
如果你这样写,那么会立即调用init
而不是被指定为事件监听器的函数。
你想要的是:
window.onload=init;
或者以更标准化和现代化的方式:
window.addEventListener('load',init);
如果您在原始代码中错误地过早调用init
,则DOM尚未加载,因此您无法获取任何元素。
当您编写onclick
时,将不会定义t[i]
属性t[i].children[1]
的指定函数。
由于该功能已分配给onclick
的{{1}}属性,因此您可以将t[i].children[0]
替换为t[i].children[1]
,这将是等效的。
答案 1 :(得分:0)
<div class="dropdown" onclick="add_class(this)">
<span>Menu</span>
<ul>
<li>First Part</li>
<li>Second Part</li>
</ul>
</div>
<script>
function add_class(dropdown) {
dropdown.getElementsByTagName("ul")[0].className = (dropdown.getElementsByTagName("ul")[0].className == "menu-open") ? "" : "menu-open";
}
</script>
答案 2 :(得分:-1)
您的代码中有1个漏洞
DEMO:http://jsfiddle.net/yosrknv3/1/
<div class="dropdown">
<span>Menu</span>
<ul onclick="init_menu()">
<li >First Part</li>
<li>Second Part</li>
</ul>
</div>
<script>
function init_menu()
{
t=document.getElementsByClassName("dropdown"); for(i=0;i<t.length;i++)
{
console.log("i am clicked"+t[i],t[i].children[1]);
t[i].children[1].classList.add("menu-open");
}
}
</script>