2008-10-12 8 views
0

나는 aspx 페이지에 iframe과 몇 개의 테이블이 있습니다. 이제 페이지가로드되면이 테이블이 숨겨집니다. iframe은 파일을 데이터베이스에 업로드하는 데 사용됩니다. 이벤트 결과에 따라 내 메인 페이지에 특정 테이블을 표시해야합니다 (이 테이블은 기본적으로 "재시도", "다음"버튼 ... 파일의 업로드 여부에 따라 각각의 단추를 표시해야합니다) .iframe로드 이벤트를 방지하는 방법은 무엇입니까?

이제 iframe의 "onload"이벤트에 자바 스크립트가있어서이 테이블을 숨기고 있습니다. 이벤트가 끝나고 컨트롤이 돌아 오면 특정 테이블을 보여줍니다. 하지만 iframe이 다시로드되고 테이블이 숨겨집니다. 어느 누구도이 문제를 해결할 수 있습니까? iframe에 두 번째로로드하지 않으려합니다.

감사합니다.

답변

0

나는 당신의 문제가 무엇인지 모르겠지만 아마 당신의 접근 방식은 조금 달라야합니다. iframe에 부모의 함수를 호출하는 코드를 넣으십시오. 이 함수는 적절한 표를 표시합니다.

<!-- in the main page ---> 
function showTable1() {} 

<!-- in the iframe --> 
window.onload = function() { 
    parent.showTable1(); 
} 

이렇게하면 기본 페이지가 아닌 iframe에 많은 제어가 적용됩니다.

0

iframe의 두 번째로드를 막을 수 있는지 판단하기에 충분한 질문이 없습니다. iframe이 두 번째 시간을로드하고이 경우 테이블을 숨기기위한 논리를 생략되는 경우하지만

0

이 내 코드입니다, 확인하기 위해 자바 스크립트 변수를 사용하여

기능 initUpload() { 을 제안 // 경고 ("IFrame로드"); _divFrame = document.getElementById ('divFrame'); _divUploadMessage = document.getElementById ('divUploadMessage'); _divUploadProgress = document.getElementById ('divUploadProgress'); _ifrFile = document.getElementById ('ifrFile'); _tbRetry = document.getElementById ('tbRetry'); _tbNext = document.getElementById ('tblNext');

  _tbRetry.style.display='none'; 
     _tbNext.style.display='none'; 

     var btnUpload = _ifrFile.contentWindow.document.getElementById('btnUpload'); 

     btnUpload.onclick = function(event) 
     { 
      var myFile = _ifrFile.contentWindow.document.getElementById('myFile'); 

      //Baisic validation 
      _divUploadMessage.style.display = 'none'; 


      if (myFile.value.length == 0) 
      { 
       _divUploadMessage.innerHTML = '<span style=\"color:#ff0000\">Please select a file.</span>'; 
       _divUploadMessage.style.display = ''; 
       myFile.focus(); 
       return; 
      } 

      var regExp = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.doc|.txt|.xls|.docx |.xlsx)$/; 

      if (!regExp.test(myFile.value)) //Somehow the expression does not work in Opera 
      { 
       _divUploadMessage.innerHTML = '<span style=\"color:#ff0000\">Invalid file type. Only supports doc, txt, xls.</span>'; 
       _divUploadMessage.style.display = ''; 
       myFile.focus(); 
       return; 
      } 


      _ifrFile.contentWindow.document.getElementById('Upload').submit(); 
      _divFrame.style.display = 'none'; 


     } 
    } 

함수 UploadComplete (메시지 ISERROR) { 경보 (메시지); // 경고 (isError);

  clearUploadProgress(); 


     if (_UploadProgressTimer) 
     { 
      clearTimeout(_UploadProgressTimer); 
     } 

     _divUploadProgress.style.display = 'none'; 
     _divUploadMessage.style.display = 'none'; 
     _divFrame.style.display = 'none'; 
     _tbNext.style.display=''; 

     if (message.length) 
     { 
      var color = (isError) ? '#008000' : '#ff0000'; 

      _divUploadMessage.innerHTML = '<span style=\"color:' + color + '\;font-weight:bold">' + message + '</span>'; 
      _divUploadMessage.style.display = ''; 
      _tbNext.style.display=''; 
      _tbRetry.style.display='none'; 



     } 
    } 

tblRetry 및 tblNext는 이벤트 결과에 따라 표시 할 테이블입니다.

1

mmm 당신은 aspx 페이지에 있다고 말했고, iframe은 포스트 백을한다고 가정합니다. 따라서이 페이지는 페이지를 다시로드합니다. 당신이 다시 게시를 피할 수 경우

... 뭔가처럼 ... 그냥 게시하기 전에 메인 페이지에 플래그를 설정하고로드하는 동안 그에 대해 확인했습니다 :

mainpage.waitTillPostBack = true 
YourFunctionCausingPostBack(); 


.. 

onload=function(){ 
if(!mainpage.waitTillPostBack){ 
hideTables(); 
} 
mainpage.waitTillPostBack = false; 
} 
관련 문제