无法在listitem中添加onclick处理程序到超链接标记

时间:2008-12-15 08:19:08

标签: javascript onclick handler

尝试向我的标签添加一个onclick处理程序,似乎无法正确选择DOM。你们能帮忙吗?

  <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}
    }
  }
}

4 个答案:

答案 0 :(得分:2)

好像你的关闭是错误的。 试试

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

如果有效则问题是jQuery Closures, Loops and Events

的欺骗

答案 1 :(得分:0)

我同意RoBorg并建议阅读有关JavaScript范围的内容。它会解释很多。

答案 2 :(得分:0)

您的JS的第一行,您创建var lis,但随后您在items上进行迭代。这真的是你想要的吗?

答案 3 :(得分:0)

完整的功能,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);
    }
  }

}