2014-11-20 3 views
1

나는이 문제에 너무 많은 저쪽 편에 있습니다.자바 스크립트 및 for 루프가 작동하지 않습니다.

여기는 제가 실행중인 코드입니다. 의도 한대로 그것은 종류의 실행

var Category = []; 

    //START OF VARIABLES 

    var ID1; 
    var ID2; 
    var ID3; 
    var ID4; 
    var ID5; 

    var temp1; 
    var temp2; 
    var temp3; 
    var temp4; 
    var temp5; 

    var extracats2; 

    var Level2CatsLen; 
    var Level3CatsLen; 
    var Level4CatsLen; 
    var Level5CatsLen; 

    var Level2Children = []; 
    var Level3Children = []; 
    var Level4Children = []; 
    var Level5Children = []; 

    //END OF VARIABLES 

     var dispatchMouseEvent = function(target, var_args) { 
       var e = document.createEvent("MouseEvents"); 
     e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1)); 
     target.dispatchEvent(e); 
       target.addEventListener("click",Level2CatsLen = GetLevel2, true); 

    } 

    var Level1Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry "); //GETTING LEVEL 1 CATS 

    var Level1CatsLen = Level1Cats.length; //GETTING LEVEL 1 CAT LEN 

     function GoToLevel2(n) { //GO TO NEXT LEVEL! 
     setTimeout(function() { 
     ID1 = Level1Cats[n].id; 
     temp1 = Level1Cats[n].innerHTML; 
     temp1 = temp1.replace(/&amp;/gi, "&").replace(/<[^>]*>/gi, "").replace(/<[^>]*>/gi, ""); 
     console.log(temp1); 
     dispatchMouseEvent(Level1Cats[n], "mouseover", true, true); 
     dispatchMouseEvent(Level1Cats[n], "click", true, true); 
     }, i*2000); 
     } 

     function GoToLevel3(n) { //GO TO NEXT LEVEL! 
     setTimeout(function() { 
     ID2 = Level1Cats[n].id; 
     temp2 = Level1Cats[n].innerHTML; 
     temp2 =temp2.replace(/&amp;/gi, "&").replace(/<[^>]*>/gi, "").replace(/<[^>]*>/gi, ""); 
     console.log(temp2); 
     dispatchMouseEvent(Level3Cats[n], "mouseover", true, true); 
     dispatchMouseEvent(Level3Cats[n], "click", true, true); 
     }, i*1500); 
     } 

     function GetLevel2() { 
     setTimeout(function() { 
      Level2Children = []; 
     Level2Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry"); 
     console.log("Level1CatLen: "+Level1CatsLen); 
     var Level2CatsLen = Level2Cats.length 
     console.log("Level2CatLen: "+Level2CatsLen); 

     extracats2 = Level2CatsLen - Level1CatsLen; 
     console.log("EXTRACATS2: "+extracats2); 


      console.log("TRYING CAT 2"); 

      //#### LEVEL 3 #### 
      for (ii = 0; ii < extracats2; ii++) { 
      if (extracats2 < 2) { 
      alert("lel"); 
       GoToLevel3(ii);  

      Level2Children.push(Level2Cats[ii+Levael1CatsLen].id); 
      } 

     //DO SOMETHING WITH CATEGORIES - Level 1 

     Category.push({Name: temp1, ID: ID1, ParentID: 'null', ChildrenIDs: Level2Children}); 
     console.log("LELLELLEL"); 
     //FINISH 


     return Level2CatsLen; 
     }},3000); 
     } 

    //THE ACTUAL METHOD! 

     for (i = 0; i <= Level1CatsLen-1; i++) { 
     //#### LEVEL 2 #### 
     GoToLevel2(i); 


     // END OF LEVEL 1 
    } 

..

그래서 그것은 루프하지만 조건을 충족하지 못하는 몇 가지 이유는 다음을 얻는다.

//#### LEVEL 3 #### 
for (ii = 0; ii < extracats2; ii++) { 
if (extracats2 < 2) { 
alert("lel"); 
    GoToLevel3(ii);  

Level2Children.push(Level2Cats[ii+Levael1CatsLen].id); 
} 

내가 알 수 있듯이 실제로 경고는 있지만 결코 실제로는 발생하지 않습니다.

위의 결과는 하나의 카테고리를 제외한 모든 카테고리가 2 이상이므로 for 루프 내에서 다음 코드를 실행해야한다고 덧붙입니다. 그것은 ..

어떤 아이디어?

답변

1

Razroo는 아주 좋은 점을 많이 보여 주었고 나는 그와 완전히 동의합니다.

"2보다 큰"숫자를 원하는 것처럼 보였지만 if 문은 2보다 작은 숫자를 찾고 있습니다.

나는 당신이되고 그것을 변경할 필요가 있다고 생각 : 쉽게 간과, if (extracats2 > 2) {

간단한 실수를 :)

2

어쨌든 몇 가지 제안이 있습니다.

  1. 귀하의 코드인지 다른 사람인지 확실하지 않습니다. 그럼에도 불구하고 37 행의 세미콜론은 좋은 생각입니다.
  2. 암시 적 선언 (var가없는 경우) 대신 var을 사용하는 것이 좋습니다.
  3. for 루프와 관련하여 루프가 발생하지 않습니다. for 루프의 일부가 아니기 때문에 Level2CatsLen이 끝나기 전에 반환하므로 값은 그대로 유지됩니다.
  4. var Level2CarsLen은 줄 70에서 세미콜론으로 끝나지 않았으므로 문제의 일부가 될 수도 있습니다.
  5. 또한 Levael1Cats1Len의 철자가 잘못되었습니다. 대신 Level1CatsLen이 있어야하며 a.
  6. 또한 GetLevel2() {65 행에서 시작하는 함수는 97 행에서 끝납니다. 따라서 어쩌면 이전에 끝내기를 원할 수도 있습니다.

그 중 하나가 도움이되기를 바랍니다. 당신이 위대한 일을하고 있습니다, 심지어 이것들 중 하나가 그것을하지 않더라도!

관련 문제