トラブルのListItem内のハイパーリンクタグにonclickのハンドラを追加します

StackOverflow https://stackoverflow.com/questions/367752

  •  21-08-2019
  •  | 
  •  

質問

私のタブに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}
    }
  }
}
役に立ちましたか?

解決

あなたの閉鎖は間違っているように思えます。 試してみてください。

as[j].onclick = function(items, i)
{
    return function()
    {
        changeTab(items[i].id);
        return false;
    };
}(items, i);
それが動作する場合は、

、その後の質問は jQueryのクロージャ、ループとイベントのデュープです

他のヒント

私はRoBorgに同意し、JavaScriptのスコープについて読んで示唆しています。それは多くのことを説明します。

あなたのJSの最初の行を、あなたはvar lisを作成するが、その後、あなたはitemsに繰り返します。本当に何をしたいということですか?

完全な機能、変更が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);
    }
  }

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top