2009-07-14 12 views
0

Ich habe einen Iframe innerhalb eines jQuery-Registerkartenlayouts. Ich verwende den iframe, um ein Bild hochzuladen, um einen AJAX-Datei-Upload zu simulieren. Es scheint immer, wenn meine Iframe Postbacks, führt die $ page (Dokument) .ready der übergeordneten Seite, um auszuführen, die aktuelle Registerkarte zurückgesetzt, auf der ich positioniert bin.Verhindern, dass Iframe-Postback die 'ready' -Funktion von jQuery für das übergeordnete Element aufruft

Haben Sie Ideen, wie Sie das verhindern können?

function uploadDone() { 

    var data = eval("("+ $('#upload_target').contents().find('body').html() +")"); 
    if(data.success) { 
     $('#upload_summary').append("<img src='" + data.full_path + "' />"); 
     $('#upload_summary').append("<br />Size: " + data.file_size + " KB"); 
    } 
    else if(data.failure) { //Upload failed - show user the reason. 
     alert("Upload Failed: " + data.failure); 
    } 
} 

$(document).ready(function() { 

    $('#image_uploader').submit(function() { 

     if($.browser.safari || $.browser.opera) { 

      $('#upload_target').load(function(){ 
       setTimeout(uploadDone, 0); 
      }); 

      var iframe = document.getElementById('upload_target'); 
      var iSource = iframe.src; 
      iframe.src = ''; 
      iframe.src = iSource; 

     } else { 

      $('#upload_target').load(uploadDone); 
     } 
    }); 

}); 
+0

Konnten Sie Ihren Code bekannt geben? Können Sie nicht versuchen, ein Flag zu setzen, wenn Sie ein Formular in iFrame senden und dieses Flag in document.ready Ihrer übergeordneten Seite überprüfen? – SolutionYogi

+0

Ist es normales Verhalten, dass ein Postback in einem Iframe ein Postback auf der übergeordneten Seite verursacht? – cweston

Antwort

1

Eine Flagge macht Sinn (wie SolutionYogi erwähnt). Wenn das document.ready im übergeordneten Frame nur einmal ausgeführt werden muss, setzen Sie ein globales Flag auf einen Wert, den Sie überprüfen können, wenn es erneut ausgelöst wurde.

Eine andere Möglichkeit besteht darin, document.ready nach der Ausführung zu entbinden. Zum Beispiel $(document).unbind('ready')

Verwandte Themen