OK, d'abord la solution rapide, mais il est pas la meilleure façon d'utiliser JS sur votre page:
Modifier l'appel à ceci: dans le test,
<div onclick="test(this);" class="test">
Ensuite, utilisez ceci:
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;
}
}
}
Cela permet de masquer tout l'enfant ul
du div
qui est cliqué.
Une meilleure façon
OK, pour la réponse plus longue. Attachez les événements après coup en utilisant attachEvent
et addEventListener
ou utilisez une bibliothèque comme jQuery pour vous aider.Voici la solution brute:
Configurez votre code HTML de cette façon (pas onclick
):
<div class="test">
Et puis à la fin de votre code HTML mis ceci:
<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>
Maintenant, vous n'a pas de code JavaScript dans votre code HTML, et vous pouvez vous débarrasser du paramètre supplémentaire sur la fonction test
.
+1 Nice et propre. – Sampson
+1 pour votre deuxième approche. – Adeel