2014-07-16 5 views
0

웹 애플리케이션 (JSF/Primefaces)에서 처음에는 '로딩'메시지로 막혀있는 패널이 여러 개 있지만, 일부 자바 스크립트를 작성하려고합니다. 1 ~ 15 초 후에 각 패널을 무작위로 차단 해제하도록 설정합니다 (단, 패널 1은 8 초 후 차단 해제, 패널 2는 4 초 후 차단 해제 될 수 있음).무작위 간격으로 자바 스크립트 타임 아웃 이벤트

나는이 작업을 수행하려면 다음 코드를 작성했습니다 :

function hideBlockUI() { 

    var buiIndex = 0; 
    while(true) { 
     var buiComponent = PF('bui_' + buiIndex); 

     if (buiComponent != null) { 
      (function(buiIndex) { 
       setTimeout(function() {hideBUI('bui_' + buiIndex);}, Math.floor((Math.random() * 15) + 1)); 
      })(buiIndex); 
     } else { 
      break; 
     } 

     buiIndex++; 
    } 

    PF('poll').stop(); 
} 

function hideBUI(name) { 
    PF(name).hide(); 
} 

내가보고 오전 동작은 모든 패널이 아니라 다른 임의의 간격보다, 각 실행에 정확히 같은 시간에 차단을 해제한다는 것입니다. hideBUI()에 전달 된 이름이 정확하고 생성 된 임의의 시간 제한이 다르지만 동작이 계속 유지되는지 확인했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 숨길 구성 요소가 얼마나 많은 패널에 따라 bui_0, bui_1 ... bui_n이라는 이름으로 표시되는지는 런타임까지 알 수 없습니다.

답변

1

귀하의 문제는 당신이 1과 15 그래서 브라우저가 기다리는 가장 긴 시간이 15 밀리 초이다 사이의 값을 생성

Math.floor((Math.random() * 15) + 1) 

와 시간을 설정하는 것입니다. 덕분에이

Math.floor((Math.random() * 15) + 1)*1000 // between 1 and 15 seconds 
+0

아 예 그했다 그것을 사용하여 setTimeout documentation

수정을 참조하십시오. –

관련 문제