Problème ajoutant gestionnaire onclick de balise de lien hypertexte dans listitem
-
21-08-2019 - |
Question
Essayer d'ajouter un gestionnaire onclick à mes onglets, et ne peut pas sembler obtenir le droit de sélection DOM. Pouvez-vous les gars aider?
<div id="tabstrip">
<ul>
<li id="a" class="selected"><a href="#">A</a></li>
<li id="b"><a href="#">B</a></li>
<li id="b"><a href="#">C</a></li>
</ul>
</div>
function initTabStrip()
{
var lis = document.getElementById('tabstrip').getElementsByTagName('li');
for (var i=0;i<items.length;i++)
{
var as = items[i].getElementsByTagName('a');
for (var j=0;j<as.length;j++)
{
as[j].onclick=function(){changeTab(items[i].id);return false}
}
}
}
La solution
On dirait que votre fermeture est faux. Essayez
as[j].onclick = function(items, i)
{
return function()
{
changeTab(items[i].id);
return false;
};
}(items, i);
Si cela fonctionne alors la question est dupe de jQuery Closures, boucles et événements
Autres conseils
Je suis d'accord pour RoBorg et vous suggère de lire sur les étendues JavaScript. Il expliquera beaucoup.
La première ligne de votre JS, vous créez mais vous var lis
itérer sur items
. Est-ce vraiment ce que vous voulez?
fonction complète, avec des modifications suggérées par Roberg:
function initTabStrip()
{
var tabstrip = document.getElementById('tabstrip');
var items = tabstrip.getElementsByTagName('li');
for (var i=0;i<items.length;i++)
{
var as = items[i].getElementsByTagName('a');
for (var j=0;j<as.length;j++)
{
as[j].onclick = function(items, i)
{
return function()
{
changeTab(items[i].id);
return false;
};
}(items, i);
}
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow