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

ここで段落タグを移動しようとしていますdivoffsetTopとOffsetheightdivに応じてbaground画像がありますdivのすぐ下にparatagを移動していますがoffsetHeightとoffsetTopの追加が来ていますNAN誰か助けてください

4

1 に答える 1

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なります。>= 0xundefined

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

この最後の式は を与えますNaN。これを回避するにxは、スクリプトの先頭でデフォルト値を に割り当てるか、 に数値を割り当てるステートメントを の後に追加する必要elseがあります。ifx

またreturnfor...mループではコードが壊れているように見えます。ループはジョブを終了せず、残りのコードは実行されません。

の使用(-500).toString() + "px";は複雑に感じます。使用しないのはなぜ"-500px";ですか?

于 2012-12-25T17:53:08.120 に答える