مشكلة إضافة onclick معالج الارتباط التشعبي الوسم داخل عنصر القائمة

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

  •  21-08-2019
  •  | 
  •  

سؤال

في محاولة لإضافة onclick معالج إلى علامات التبويب ، و لا يمكن أن يبدو للحصول على دوم اختيار الحق.هل يمكنكم المساعدة ؟

  <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);

إذا كان يعمل ثم السؤال هو مغفل من مسج الإغلاق الحلقات و الأحداث

نصائح أخرى

وأنا أوافق على RoBorg وتشير القراءة عن نطاقات جافا سكريبت. وسوف أشرح كثيرا.

والسطر الأول من 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