2011-02-27 6 views
1

Javascript 기능이 종료되기 전에 문서를 수정하고 업데이트하는 방법이 있습니까? 예를 들어 (사실은하고 있지만, 충분히 가까이있어하지 무엇을) :함수가 끝나기 전에 문서를 변경하십시오.

function longloop(){ 
    for(var i=0;i<100;i++){ 
     x = someLengthyFunction(); 
     document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>'; 
    } 
} 

그 기능은 버튼을 누를 때 호출되는, 나는 루프가 진행됨에 따라 테이블을 업데이트하고 싶습니다. 루프가 끝나면 업데이트 된 테이블 만 표시됩니다.

+0

하는 당신이 IE를 지원하고 있습니까? – user113716

+0

IE가 필요 없습니다. 이것은 부수적 인 프로젝트를위한 것입니다. –

+1

좋아, 그럼 그냥 다른 일을 알고 있어야 해. 반복문에서'.innerHTML + = ' ...'을 실행하면 각 반복에서 테이블 내용의 HTML 문자열 표현을 얻고 행을 추가 한 다음 모든 내용을 덮어 씁니다. 새 문자열에. 따라서 기본적으로 각 반복에서 이전에 만들어진 모든 요소를 ​​파괴하고 모든 요소를 ​​다시 만들고 하나 더 행을 추가합니다. 이것은 매우 비쌉니다. 그냥 참고하시기 바랍니다. :영형) – user113716

답변

3

아니요, 불가능합니다.

당신이해야 할 일은 루프를 여러 부분으로 나누고 window.setTimeout을 사용하여 문서를 업데이트 한 후 다음 부분을 계속 진행하는 것입니다.

예 :

function longloop(){ 
    function work(i) { 
    x = someLengthyFunction(); 
    document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>'; 
    i++; 
    if (i < 100) window.setTimeout(function(){ work(i); }, 0); 
    } 
    work(0); 
} 
1

이것은 확실히 web workers의 직업입니다. 위의 스크립트를 작업자로 실행하여 간격을두고 메시지를 전달하여 컨텐츠를 업데이트하십시오. 그러나 매우 현대적인 브라우저 만 웹 작업자를 활용할 수 있고 JavaScript는 스레드 언어가 아니기 때문에이 작업을 수행하려면 매우 창의적으로 작성해야 할 수도 있습니다.

관련 문제