ОК, сначала быстрое исправление, хотя это не лучший способ использовать JS на вашей странице:
Изменить вызов на это:
<div onclick="test(this);" class="test">
Затем, в тесте, используйте это:
function test(el){
var uls = el.getElementsByTagName('ul');
for(var i = 0; i < uls.length; i++){
if(uls[i].className == 'innermenu'){
uls[i].style.display = "none";
break;
}
}
}
Это скроет только ребенка ul
из div
, по которому щелкнули.
Лучший способ
ОК, для более длинного ответа. Либо прикрепите события после факта, используя attachEvent
и addEventListener
, либо используйте библиотеку, такую как jQuery, чтобы помочь вам. Вот сырое решение:
Настройте HTML таким образом (без onclick
):
<div class="test">
И затем в самом конце вашего HTML-кода поместите это:
<script type="text/javascript">
var divs = document.getElementsByTagName('div');
function test(){
var uls = this.getElementsByTagName('ul');
for(var i = 0; i < uls.length; i++){
if(uls[i].className == 'innermenu'){
uls[i].style.display = "none";
break;
}
}
};
for(var i = 0; i < divs.length; i++){
var div = divs[i];
if(div.className !== "test") continue;
if(window.addEventListener){
div.addEventListener( 'click', test, true ); //FF, Webkit, etc
} else if (window.attachEvent) {
div.attachEvent('onclick', test); // IE
} else {
div.onclick = test; // Fallback
}
}
</script>
Теперь у вас нет кода JavaScript в вашем HTML, и вы можете избавиться от дополнительного параметра в функции test
.