我试图设置元素的底部,但它的价值即将到来NaN

时间:2012-12-25 16:43:36

标签: javascript

function CheckavailOnload()
{
  var elems = document.getElementsByClassName('box-collateral box-related');
  var av = document.getElementsByClassName('availability in-stock');
  var x;
  for (var i = 0; i < elems.length; i++)
  {
    if (getComputedStyle(elems[i]).visibility == 'visible') 
    {
      for (var j = 0; j < av.length; j++)
      {
        av[j].style.visibility = 'visible';
        if(elems[i].offsetTop < 0)
        {
          var x = (elems[i].offsetHeight + (elems[i]).offsetTop).toString() + "px";
          alert(x);
        }
        for(m = 0;m < av.length; m++)
        {
          av[m].style.Bottom = (-x);
          return;
        }
       }
     }
   }
   for (var k = 0; k < av.length; k++)
   {
     av[k].style.visibility = 'hidden';
   }
   var divs = document.getElementsByClassName('add-to-cart');
   for(var l = 0; l < divs.length; l++)
   { 
     divs[l].style.marginTop = (-500).toString() + "px";
     divs[l].style.marginLeft = (-20).toString() + "px";
   }
}
window.onload = CheckavailOnload;

这里我试图移动一个段落标签有baground图像取决于div offsetTop和偏移高度div也有bacground图像我正在移动para标签正好在div下面但添加offsetHeight和offsetTop即将到来NAN请任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

您已在脚本开头声明var x;。然后你要检查:

if(elems[i].offsetTop < 0) {
    var x = (elems[i]...); // var is not recommended to be here, x has been already declared once
}

如果elems[i].offsetTop恰好是>= 0,则此行中x将为undefined

av[m].style.Bottom = (-x); // Notice a typo here: should be av[m].style.bottom

最后一个表达式为您提供NaN。为避免这种情况,您需要在脚本开头为x分配默认值,或者在else之后添加if语句,其中为{{x分配了一些数值1}}。

return循环中的for...m似乎会破坏您的代码,循环将永远不会完成作业,其余代码将永远不会执行。

使用(-500).toString() + "px";感觉很复杂,为什么不使用"-500px";