Frage

Der Versuch, einen Onclick-Handler meiner Registerkarten hinzufügen und kann nicht scheinen, die DOM-Auswahl richtig zu machen. Können sie helfen?

  <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}
    }
  }
}
War es hilfreich?

Lösung

Scheint, wie Ihr Verschluss falsch ist. Versuchen

as[j].onclick = function(items, i)
{
    return function()
    {
        changeTab(items[i].id);
        return false;
    };
}(items, i);

Wenn es funktioniert, dann ist die Frage eine Betrogene von jQuery Closures, Loops und Veranstaltungen

Andere Tipps

Ich bin damit einverstanden, RoBorg und schlage vor, das Lesen über JavaScript Bereiche. Es wird eine Menge erklären.

Die erste Zeile Ihres JS erstellen Sie var lis aber dann iterieren Sie auf items. Ist das wirklich das, was Sie wollen?

komplette Funktion, mit Änderungen vorgeschlagen von 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);
    }
  }

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top